mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-27 10:40:50 +00:00
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@1488 72102866-910b-0410-8b05-ffd578937521
257 lines
8.6 KiB
Text
257 lines
8.6 KiB
Text
@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 Write a test-suite for the library. Use dejagnu.
|
||
|
||
@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.
|
||
|
||
@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 Write some code to deal with `%@@' in printf-style format strings
|
||
for systems that do not have the GNU C library. 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/libgnustep-base/volunteers.html for
|
||
a list of the claimed and unclaimed GNUStep Foundation classes.
|
||
|
||
@end itemize
|
||
|
||
|
||
@section McCallum's To Do's
|
||
|
||
@itemize @bullet
|
||
|
||
@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.
|
||
|
||
@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 Write NSRunLoop class, on top of GNU RunLoop.
|
||
|
||
@item Finish NotificationQueue, and make it interoperate with the
|
||
RunLoop properly.
|
||
|
||
@item Make the NSTimer's work and interoperate with the run loop
|
||
properly.
|
||
|
||
@item Clean up and finish the String object situation.
|
||
|
||
@item Fix many memory allocation inconsistencies. Methods that return
|
||
malloced buffers should autorelease those buffers, (like readFormat:).
|
||
|
||
@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 @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. Libobjects 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
|