diff --git a/ANNOUNCE b/ANNOUNCE index 26a3f7d..1fb14c2 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -8,16 +8,23 @@ release include: - Support for the associated reference APIs introduced with OS X 10.6. This allows storing arbitrary objects associated with another object. + - Concurrent, thread-safe, +initialize. The runtime will now send +initialize messages to different classes concurrently in multiple threads, but still ensures that no class receives another message until it has returned from +initialize. Exceptions can now safely propagate out of +initialize methods. + - Better hiding of local symbols. Now the internal runtime functions are not visible from outside of the runtime. + - Dispatch table updates have been improved. Category loading no longer triggers dtable creation and partial dtable updates are faster. + - Improvements to the low memory profile. Uses 5-10% less memory running Gorm, - and now passes the entire GNUstep and EtoileFoundation test suites. + and now passes the entire GNUstep and EtoileFoundation test suites. Build + with [g]make low_memory=yes to enable this mode. Note that the low memory + profile trades some CPU time for memory usage, so don't use it for CPU-bound + tasks. You may obtain the code for this release from subversion at the following subversion branch: diff --git a/README b/README index e093762..b2ffdad 100644 --- a/README +++ b/README @@ -21,6 +21,7 @@ Both ABIs support the following feature above and beyond the GCC runtime: - Efficient support for @synchronized() - Type-dependent dispatch, eliminating stack corruption from mismatched selectors. +- Support for the associated reference APIs introduced with Mac OS X 10.6. History ------- @@ -35,7 +36,7 @@ Since then, all of the GCC code has been removed, leaving the remaining files all MIT licensed, and allowing the entire work to be MIT licensed. The exception handling code uses a header file implementing the generic parts -of the Itanium EH ABI. This file comes from PathScale's libc++rt. PathScale +of the Itanium EH ABI. This file comes from PathScale's libcxxrt. PathScale kindly allowed it to be MIT licensed for inclusion here. Non-Fragile Instance Variables @@ -365,12 +366,18 @@ sends are to a small number of methods. For example, an NSMutableDictionary is most often sent -objectForKey: and -setObject:forKey:. If these two methods are in the cache, then the O(n) algorithm is almost never used. +The GNUstep runtime's low memory profile stores the slots in a sorted array. +This means that the worst case performance is O(log(n)) in terms of the number +of methods, as the uncached lookup proceeds using a binary search. + If you compile the GNUstep runtime with the low memory profile, it uses a similar strategy. The caches use the same slot-caching mechanism described above and can be combined with caching at the call site. The runtime will not create dispatch tables, which can save a few MB of RAM in projects with a lot of classes, but can make message sending a lot slower in the worst case. +To enable the low memory profile, add low_memory=yes to your make command line. + Objective-C 2 Features ----------------------