libs-base/Documentation/todo.texi
Andrew McCallum ded9c846c4 Add Frith-Macdonald as volunteer for proper nameserver.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@1839 72102866-910b-0410-8b05-ffd578937521
1996-10-02 13:38:11 +00:00

268 lines
9.2 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@ifset TODO_ONLY
@chapter GNU Objective-C Class Library To Do list, and Questions.
@c set the vars GOBJC_VERSION and GCC_VERSION
@include version.texi
@end ifset
@section 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
@samp{mccallum@@gnu.ai.mit.edu}.
@itemize @bullet
@item Help write a test-suite for the library. Use dejagnu. (Contact
Richard Frith-Macdonald <richard@@brainstorm.co.uk>, who has volunteered
to coordinate these efforts.)
@item Write a proper name server for Port's. Currently we're just
hashing the name to a socket port number---we could get unwanted hash
collisions. This will also allow us to name a SocketPort after it's
been created. (Contact Richard Frith-Macdonald
<richard@@brainstorm.co.uk>, who has volunteered to coordinate these
efforts.)
@ignore
@item Add some features to the compiler:
@enumerate
@item You can't add __attribute__'s to methods. I want to use:
@smallexample
- (int) writeFormat: (const char *)format, ...
__attribute__ ((format (printf, 1, 2)));
- (int) readFormat: (const char *)format, ...
__attribute__ ((format (scanf, 1, 2)));
@end smallexample
@item I would like to be able to use a function name/pointer as an
argument to @@encode() and get a type string like the selector types.
@end enumerate
@end ignore
@item Improve the code to deal with `%@@' in printf-style format strings
for systems that do not have the GNU C library. See src/NSString.m for
the current implementation, which does not handle formatting modifiers.
(Those with the GNU C Library can just use
@samp{register_printf_function}.)
@item Implement efficient SmallInt and SmallFloat classes in the same
sort of way that Smalltalk does. Talk to me. mccallum@@gnu.ai.mit.edu.
@item See
http://www.cs.rochester.edu/u/mccallum/libobjects/volunteers.html for
a list of the claimed and unclaimed GNUStep Foundation classes.
@end itemize
@section McCallum's To Do's
@itemize @bullet
@item Overhaul the string classes.
@item Separate core and non-core code in NSDictionary, NSSet, etc, the
same way I did for NSArray.
@item Separate Constant and non-Constant collections for the rest of the
GNU connection classes the same way I did for Array.
@item Make sure the GNU Archiver/Unarchiver handle
-encodeConditionalObject: and -decodeObject: correctly.
@item 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.)
@item 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.
@item 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.
@item Make my NS... classes raise the NSExceptions they are supposed to.
Change many NSParameterAssert()'s into NSAssert()'s with explanations.
@item Do low-level frobbing of TCP to reduce delays.
@item Make UdpPort work; make MachPort work.
@item Finish NotificationQueue, and make it interoperate with the
RunLoop properly.
@item Make the NSTimer's work and interoperate with the RunLoop
properly.
@item Fix many memory allocation inconsistencies. Methods that return
malloc'ed buffers should autorelease those buffers, (like readFormat:).
(I think all these are fixed now.)
@item Many code fixes and cleanups, indicated with @samp{xxx} in the
source.
@item Add Coding methods to all the collection classes.
@item Finish Collection heirarchy clean ups. We need non-mutable
version for many of the classes.
@item Possibly change implementation of @code{-(int)compare:anObject}
for Collection. How should non-Indexed collections be ordered?
@item
Finish HashTable.m. Implement freeKeys:values: (What is this supposed
to do anyway?). Handle archiving of atom string, "%", keys.
@item
Finish Time.m. Many methods are not yet implemented.
@item
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...
@item
Fix all the subclassResponsibility comments in objects/*.h
@item
I will finish gnustep-base documentation.
@end itemize
@c ==================================================================
@section Questions
I would greatly appreciate your feedback on the questions
below. Please email your thoughts to mccallum@@gnu.ai.mit.edu.
@itemize @bullet
@item
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?)
@item
HashTable.m (-initKeyDesc:valueDesc:capacity:) I tried to make it
portable, but I didn't try very hard. Anyone want to send in fixes?
@item
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.>>
@item
I created libgnustep-base.texi by copying libg++.texi. Some of the text
is taken verbatim. Is this a problem?
@item
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.
@item
Does anyone really need the ability to set the collection element
comparison function independent of the -compare: method?
@item
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.
@item
Something like this needed?
- elementDidChange: (elt*)elementPtr;
Currently you have to remove, change, add, for some classes.
@c -------------------------------------------------------------------
@c @section Questions leftover from last release
@item
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.
@end itemize
@section Albin's To Do List
I'm sure that there're other things to do, but these are the ones I know now:
@subsection General
@itemize @bullet
@item Make thread-safe all of my code that should be.
@item Fully annotate all of my headers.
@item Document my work and the use of its fruit.
@end itemize
@subsection Critical
@itemize @bullet
@item Code:
@itemize +
@item (@file{src/array.m}) @samp{objects_array_check}
@item (@file{src/array.m}) @samp{objects_array_map_elements}
@item (@file{src/cbs-char-p.m}) @samp{objects_char_p_describe}
@item (@file{src/cbs-int-p.m}) @samp{objects_int_p_describe}
@item (@file{src/cbs-int.m}) @samp{objects_int_describe}
@item (@file{src/hash.m}) @samp{_objects_hash_hash}
@item (@file{src/hash.m}) @samp{objects_hash_check}
@item (@file{src/hash.m}) @samp{objects_hash_description}
@item (@file{src/list.m}) @samp{objects_list_is_equal_to_list}
@item (@file{src/map.m}) @samp{_objects_map_hash}
@item (@file{src/map.m}) @samp{objects_map_check}
@item (@file{src/map.m}) @samp{objects_map_description}
@end itemize
@item Correct:
@itemize +
@item (@file{src/array.m}) @samp{objects_array_dealloc}
@item (@file{src/cbs-int.m}) @samp{_GNUSTEP_BASE_NOT_AN_INT_MARKER}
@end itemize
@item Improve the error handling of:
@itemize +
@item (@file{src/array.m}) @samp{_objects_array_insert_bucket}
@item (@file{src/hash.m}) @samp{objects_hash_add_element_known_absent}
@item (@file{src/list.m}) @samp{objects_list_at_index_insert_element}
@item (@file{src/map.m}) @samp{objects_map_at_key_put_value_known_absent}
@end itemize
@end itemize
@subsection Not So Critical
@itemize @bullet
@item Strengthen my resolve on the correctness of:
@itemize +
@item (@file{src/cbs-char-p.m}) @samp{_GNUSTEP_BASE_NOT_A_CHAR_P_MARKER}
@item (@file{src/cbs-id.m}) @samp{_GNUSTEP_BASE_NOT_AN_ID_MARKER}
@item (@file{src/cbs-int-p.m}) @samp{_GNUSTEP_BASE_NOT_AN_INT_P_MARKER}
@item (@file{src/cbs-int-p.m}) @samp{objects_int_p_is_equal}
@item (@file{src/cbs-void-p.m}) @samp{_GNUSTEP_BASE_NOT_A_VOID_P_MARKER}
@item (@file{src/hash.m}) @samp{objects_hash_rightsize}
@item (@file{src/hash.m}) @samp{objects_hash_all_elements}
@item (@file{src/map.m}) @samp{objects_map_rightsize}
@item (@file{src/map.m}) @samp{objects_map_all_keys}
@item (@file{src/map.m}) @samp{objects_map_all_values}
@end itemize
@item Improve the effeciency of:
@itemize +
@item (@file{src/array.m}) @samp{_objects_array_insert_bucket}
@item (@file{src/hash.m}) @samp{objects_hash_minus_hash}
@item (@file{src/list.m}) @samp{objects_list_at_index_insert_list}
@end itemize
@end itemize