Todo **** Projects Looking for Volunteers =============================== If you think you can do one of these projects, please let me know. Your help is greatly appreciated. Send email to `fedor@gnu.org'. * Fix NSLog so it conforms to specs. Need to check that write to stderr went ok, and if not write to syslog. Also need to serealize output (with threads). * Simplify NSException and NSAssertionHandler and make sure they don't cause race conditions (if an exception is raised while processing an exception. * Fix all the places marked FIXME or xxx. * Need to improve the testsuite and actually run it on gstep-base. * Change all the assert()'s (especially in the archiving code) to NSAssert()'s. This will help make D.O. servers more safe from bad clients. * Make NS... classes raise the NSExceptions they are supposed to. Change many NSParameterAssert()'s into NSAssert()'s with explanations. * Many implementations could be made more efficient. The library hasn't been efficiency tuned very much. Overridding more methods in certain classes could make things more efficient (especially EltNodeCollector). SplayTree's could be done using top-down splaying. collhash could be completely reimplemented. ...and a lot more... * Implement efficient SmallInt and SmallFloat classes in the same sort of way that Smalltalk does. Talk to me. mccallum@gnu.ai.mit.edu. McCallum's To Do's ================== * Separate core and non-core code in NSDictionary, NSSet, etc, the same way I did for NSArray. * Separate Constant and non-Constant collections for the rest of the GNU connection classes the same way I did for Array. * Make sure the GNU Archiver/Unarchiver handle -encodeConditionalObject: and -decodeObject: correctly. * Reorganize some of the Categories to make a minimal NSObject-using program smaller. Currently it is huge becuase it pulls in archiving and therefore many of the collection classes. (But perhaps this doesn't matter, since we recommend using shared libraries anyway.) * Make sure that Encoder's properly release their CStream and Stream's. It seems that the Stream is not getting -delloc'ed, and therefore may not be closed, and therefore may be missing data at the end. * Do low-level frobbing of TCP to reduce delays. * Make UdpPort work; make MachPort work. * Finish NotificationQueue, and make it interoperate with the RunLoop properly. * Make the NSTimer's work and interoperate with the RunLoop properly. * Add Coding methods to all the collection classes. * Finish Collection heirarchy clean ups. We need non-mutable version for many of the classes. * Possibly change implementation of `-(int)compare:anObject' for Collection. How should non-Indexed collections be ordered? Questions ========= I would greatly appreciate your feedback on the questions below. Please email your thoughts to mccallum@gnu.ai.mit.edu. * I want to put method names in texinfo indices, but the colons in the method names are interfering with info's notion of menu item names and node names. Help. Any ideas? (Kresten?) * HashTable.m (-initKeyDesc:valueDesc:capacity:) I tried to make it portable, but I didn't try very hard. Anyone want to send in fixes? * I fixed -emptyCopy in all the subclasses, but the -emptyCopy scheme seems pretty fragile. How about calling -initFoo: inside -emptyCopy? This way we avoid having yet another method in which instance vars must be initialized to some consistent state. -allocCopy would never even get called. <> * Does anyone really need the ability to set the collection element comparison function independent of the -compare: method? * How about adding flexibity in the method name that a LinkedList sends a LinkedListNode to get/set the link ivars. This would enable us to add a node to more than one linked list. * Something like this needed? - elementDidChange: (elt*)elementPtr; Currently you have to remove, change, add, for some classes. Albin's To Do List ================== I'm sure that there're other things to do, but these are the ones I know now: General ------- * Make thread-safe all of my code that should be. * Fully annotate all of my headers. * Document my work and the use of its fruit. Critical -------- * Code: + (`src/array.m') `objects_array_check' + (`src/array.m') `objects_array_map_elements' + (`src/cbs-char-p.m') `objects_char_p_describe' + (`src/cbs-int-p.m') `objects_int_p_describe' + (`src/cbs-int.m') `objects_int_describe' + (`src/hash.m') `_objects_hash_hash' + (`src/hash.m') `objects_hash_check' + (`src/hash.m') `objects_hash_description' + (`src/list.m') `objects_list_is_equal_to_list' + (`src/map.m') `_objects_map_hash' + (`src/map.m') `objects_map_check' + (`src/map.m') `objects_map_description' * Correct: + (`src/array.m') `objects_array_dealloc' + (`src/cbs-int.m') `_GNUSTEP_BASE_NOT_AN_INT_MARKER' * Improve the error handling of: + (`src/array.m') `_objects_array_insert_bucket' + (`src/hash.m') `objects_hash_add_element_known_absent' + (`src/list.m') `objects_list_at_index_insert_element' + (`src/map.m') `objects_map_at_key_put_value_known_absent' Not So Critical --------------- * Strengthen my resolve on the correctness of: + (`src/cbs-char-p.m') `_GNUSTEP_BASE_NOT_A_CHAR_P_MARKER' + (`src/cbs-id.m') `_GNUSTEP_BASE_NOT_AN_ID_MARKER' + (`src/cbs-int-p.m') `_GNUSTEP_BASE_NOT_AN_INT_P_MARKER' + (`src/cbs-int-p.m') `objects_int_p_is_equal' + (`src/cbs-void-p.m') `_GNUSTEP_BASE_NOT_A_VOID_P_MARKER' + (`src/hash.m') `objects_hash_rightsize' + (`src/hash.m') `objects_hash_all_elements' + (`src/map.m') `objects_map_rightsize' + (`src/map.m') `objects_map_all_keys' + (`src/map.m') `objects_map_all_values' * Improve the effeciency of: + (`src/array.m') `_objects_array_insert_bucket' + (`src/hash.m') `objects_hash_minus_hash' + (`src/list.m') `objects_list_at_index_insert_list'