diff --git a/ANNOUNCE.1.9 b/ANNOUNCE.1.9 new file mode 100644 index 00000000..e705ee74 --- /dev/null +++ b/ANNOUNCE.1.9 @@ -0,0 +1,77 @@ +GNUstep Objective-C Runtime 1.9 +=============================== + +This the ninth official 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. + +- Improved the dispatch table representation to improve performance and cache + usage on the fast path. + +- 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. + +- 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.9 branch: + +https://github.com/gnustep/libobjc2.git + +Alternatively, a tarball is available from: + +https://github.com/gnustep/libobjc2/archive/v1.9.zip +https://github.com/gnustep/libobjc2/archive/v1.9.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. + +If you come across any problems, please file them in the issue tracker: + +https://github.com/gnustep/libobjc2/issues