diff --git a/ANNOUNCE b/ANNOUNCE index 1c52300..4d569a4 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,76 +1,38 @@ -GNUstep Objective-C Runtime 1.x +GNUstep Objective-C Runtime 2.0 =============================== -This the ninth official release of the GNUstep Objective-C runtime (a.k.a. +This the second major release of the GNUstep Objective-C runtime (a.k.a. libobjc2). This runtime was designed to support the features of modern dialects of Objective-C for use with GNUstep and other Objective-C programs. -Highlights of this release include: -- Support for 64-bit ARM (AArch64) processors, including assembly fast paths - for message sending. +This release introduces a new Objective-C ABI, which is designed to be forward +compatible with future changes and removes a large number of hacks that were +required for compatibility with the prior ABI that included features introduced +in the 1980s. -- Improved the dispatch table representation to improve performance and cache - usage on the fast path. +The runtime will now use the new ABI's data structures internally and will +automatically upgrade on-disk structures from old ABIs when used with the old +ABI. As a result, memory usage will be higher when using the old ABI and users +who are unable to recompile their code may prefer to stick with the 1.9.x +release series. Mixing libraries compiled with the old and new ABIs is not +supported and will abort at run time. -- The implementation of `imp_implementationWithBlock`, the function that allows - blocks to be used as methods, no longer requires physical pages to be mapped - both writeable and executable. +The new ABI provides better run-time introspection metadata and smaller +binaries. When used with the new ABI, this version of the runtime will consume +less memory than the previous release. -- Numerous improvements to the interaction between runtime functions and ARC. - -- Support for Thumb-2 interworking on ARM. Note that the library must be - compiled for ARMv7 or ARMv6T2 for this code to be enabled. Once it has been, - other Objective-C binaries linked with the library can be compiled as ARM or - Thumb-2 code. This will also generate Thumb-2 message send functions, - improving instruction cache usage. - -- Significant improvements to ARC, including - - * The runtime no longer acquires a global lock on every object deallocation (a - global lock is still used for objects that have weak references). *NOTE:* - This is incompatible with other code directly inspecting the reference - count and will break with older versions of GNUstep Base! - - * Weak references use a scheme closer to C++ `std::weak_pointer` and are - lazily zeroed on access. This reduces the space overheads for weak - references. - - * Some additional helper functions are added for use in `NSObject` and other - root classes, which simplifies the layering between the runtime and the - Foundation (or equivalent) implementation. - -- Improvements to how the runtime handles layout of ivars with strong alignment - requirements, which should fix issues relating to using vector types in - Objective-C objects. - -- The option to build a separate libobjcxx has been removed. The runtime will - now depend on the C++ standard library implementation if no useable C++ - runtime is available. Note that C++ exception interworking does not work - because LLVM's libc++abi (shipped by Apple) does not provide GNU-compatible - hooks and so Objective-C++ exception support will be automatically disabled - on this platform. Any other platforms shipping libc++abi should consider - either GNU libsupc++ or libcxxrt as an alternative. - -You may obtain the code for this release from git and use the 1.x branch: +You may obtain the code for this release from git and use the 2.0 branch: https://github.com/gnustep/libobjc2.git Alternatively, a tarball is available from: -https://github.com/gnustep/libobjc2/archive/v1.x.zip -https://github.com/gnustep/libobjc2/archive/v1.x.tar.gz +https://github.com/gnustep/libobjc2/archive/v2.0.zip +https://github.com/gnustep/libobjc2/archive/v2.0.tar.gz The runtime library is responsible for implementing the core features of the object model, as well as exposing introspection features to the user. The -GNUstep runtime implements Apple's Objective-C Runtime APIs, and a small number -of GCC APIs for legacy compatibility. - -This library is based on the Étoilé Objective-C Runtime, an earlier research -prototype, and includes support for non-fragile instance variables, -type-dependent dispatch, and object planes. It is fully backwards compatible -with the FSF's GCC 4.2.1 Objective-C ABI and also implements a new ABI that is -supported by Clang and Étoilé's LanguageKit and is required for some of the -newer features. +GNUstep runtime implements a superset of Apple's Objective-C Runtime APIs. If you come across any problems, please file them in the issue tracker: