libs-base/TODO

216 lines
7 KiB
Text
Raw Normal View History

Todo
****
This TODO list is out of date.
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 `mccallum@gnu.org'.
* 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.
* Fix many memory allocation inconsistencies. Methods that return
malloc'ed buffers should autorelease those buffers, (like
readFormat:). (I think all these are fixed now.)
* Many code fixes and cleanups, indicated with `xxx' in the source.
* 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?
* Fix all the subclassResponsibility comments in objects/*.h
* I will finish gnustep-base documentation.
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. <<ObjC insiders: This is
a less well-expressed version of what we've just been discussing
in email.>>
* If you don't like the organization of the documentation and you
have suggestions for changes, please say so now, not after it's
all been written.
* 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.
* I've been told that GNU filenames should be 14 chars or less. I
don't want to abbreviate my classnames, but I think using .h
@interface files with names different than the class name is even
worse. ** I want to keep my unabbreviated filenames!! ** What to
do, what to do... I can't believe that *all* GNU classnames will be
limited to 12 characters forever and ever--disgusting.
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'