11e72d8d2SderaadtThis is a list of projects for CVS. In general, unlike the things in 21e72d8d2Sderaadtthe TODO file, these need more analysis to determine if and how 31e72d8d2Sderaadtworthwhile each task is. 41e72d8d2Sderaadt 51e72d8d2SderaadtI haven't gone through TODO, but it's likely that it has entries that 61e72d8d2Sderaadtare actually more appropriate for this list. 71e72d8d2Sderaadt 81e72d8d2Sderaadt0. Improved Efficency 91e72d8d2Sderaadt 101e72d8d2Sderaadt* CVS uses a single doubly linked list/hash table data structure for 111e72d8d2Sderaadt all of its lists. Since the back links are only used for deleting 121e72d8d2Sderaadt list nodes it might be beneficial to use singly linked lists or a 131e72d8d2Sderaadt tree structure. Most likely, a single list implementation will not 141e72d8d2Sderaadt be appropriate for all uses. 151e72d8d2Sderaadt 161e72d8d2Sderaadt One easy change would be to remove the "type" field out of the list 171e72d8d2Sderaadt and node structures. I have found it to be of very little use when 181e72d8d2Sderaadt debugging, and each instance eats up a word of memory. This can add 191e72d8d2Sderaadt up and be a problem on memory-starved machines. 201e72d8d2Sderaadt 211e72d8d2Sderaadt Profiles have shown that on fast machines like the Alpha, fsortcmp() 221e72d8d2Sderaadt is one of the hot spots. 231e72d8d2Sderaadt 241e72d8d2Sderaadt* Dynamically allocated character strings are created, copied, and 251e72d8d2Sderaadt destroyed throughout CVS. The overhead of malloc()/strcpy()/free() 261e72d8d2Sderaadt needs to be measured. If significant, it could be minimized by using a 271e72d8d2Sderaadt reference counted string "class". 281e72d8d2Sderaadt 291e72d8d2Sderaadt* File modification time is stored as a character string. It might be 301e72d8d2Sderaadt worthwile to use a time_t internally if the time to convert a time_t 311e72d8d2Sderaadt (from struct stat) to a string is greater that the time to convert a 321e72d8d2Sderaadt ctime style string (from the entries file) to a time_t. time_t is 331e72d8d2Sderaadt an machine-dependant type (although it's pretty standard on UN*X 341e72d8d2Sderaadt systems), so we would have to have different conversion routines. 351e72d8d2Sderaadt Profiles show that both operations are called about the same number 361e72d8d2Sderaadt of times. 371e72d8d2Sderaadt 381e72d8d2Sderaadt* stat() is one of the largest performance bottlenecks on systems 391e72d8d2Sderaadt without the 4.4BSD filesystem. By spliting information out of 401e72d8d2Sderaadt the filesystem (perhaps the "rename database") we should be 411e72d8d2Sderaadt able to improve performance. 421e72d8d2Sderaadt 431e72d8d2Sderaadt* Parsing RCS files is very expensive. This might be unnecessary if 441e72d8d2Sderaadt RCS files are only used as containers for revisions, and tag, 451e72d8d2Sderaadt revision, and date information was available in easy to read 461e72d8d2Sderaadt (and modify) indexes. This becomes very apparent with files 471e72d8d2Sderaadt with several hundred revisions. 481e72d8d2Sderaadt 491e72d8d2Sderaadt1. Improved testsuite/sanity check script 501e72d8d2Sderaadt 511e72d8d2Sderaadt* Need to use a code coverage tool to determine how much the sanity 521e72d8d2Sderaadt script tests, and fill in the holes. 53*50bf276cStholo 54