|
| 1 | +GNUstep Objective-C Runtime 1.9 |
| 2 | +=============================== |
| 3 | + |
| 4 | +This the ninth official release of the GNUstep Objective-C runtime (a.k.a. |
| 5 | +libobjc2). This runtime was designed to support the features of modern |
| 6 | +dialects of Objective-C for use with GNUstep and other Objective-C programs. |
| 7 | +Highlights of this release include: |
| 8 | + |
| 9 | +- Support for 64-bit ARM (AArch64) processors, including assembly fast paths |
| 10 | + for message sending. |
| 11 | + |
| 12 | +- Improved the dispatch table representation to improve performance and cache |
| 13 | + usage on the fast path. |
| 14 | + |
| 15 | +- The implementation of `imp_implementationWithBlock`, the function that allows |
| 16 | + blocks to be used as methods, no longer requires physical pages to be mapped |
| 17 | + both writeable and executable. |
| 18 | + |
| 19 | +- Numerous improvements to the interaction between runtime functions and ARC. |
| 20 | + |
| 21 | +- Support for Thumb-2 interworking on ARM. Note that the library must be |
| 22 | + compiled for ARMv7 or ARMv6T2 for this code to be enabled. Once it has been, |
| 23 | + other Objective-C binaries linked with the library can be compiled as ARM or |
| 24 | + Thumb-2 code. This will also generate Thumb-2 message send functions, |
| 25 | + improving instruction cache usage. |
| 26 | + |
| 27 | +- Significant improvements to ARC, including |
| 28 | + |
| 29 | + * The runtime no longer acquires a global lock on every object deallocation (a |
| 30 | + global lock is still used for objects that have weak references). *NOTE:* |
| 31 | + This is incompatible with other code directly inspecting the reference |
| 32 | + count and will break with older versions of GNUstep Base! |
| 33 | + |
| 34 | + * Weak references use a scheme closer to C++ `std::weak_pointer` and are |
| 35 | + lazily zeroed on access. This reduces the space overheads for weak |
| 36 | + references. |
| 37 | + |
| 38 | + * Some additional helper functions are added for use in `NSObject` and other |
| 39 | + root classes, which simplifies the layering between the runtime and the |
| 40 | + Foundation (or equivalent) implementation. |
| 41 | + |
| 42 | +- Improvements to how the runtime handles layout of ivars with strong alignment |
| 43 | + requirements, which should fix issues relating to using vector types in |
| 44 | + Objective-C objects. |
| 45 | + |
| 46 | +- The option to build a separate libobjcxx has been removed. The runtime will |
| 47 | + now depend on the C++ standard library implementation if no useable C++ |
| 48 | + runtime is available. Note that C++ exception interworking does not work |
| 49 | + because LLVM's libc++abi (shipped by Apple) does not provide GNU-compatible |
| 50 | + hooks and so Objective-C++ exception support will be automatically disabled |
| 51 | + on this platform. Any other platforms shipping libc++abi should consider |
| 52 | + either GNU libsupc++ or libcxxrt as an alternative. |
| 53 | + |
| 54 | +You may obtain the code for this release from git and use the 1.9 branch: |
| 55 | + |
| 56 | +https://github.com/gnustep/libobjc2.git |
| 57 | + |
| 58 | +Alternatively, a tarball is available from: |
| 59 | + |
| 60 | +https://github.com/gnustep/libobjc2/archive/v1.9.zip |
| 61 | +https://github.com/gnustep/libobjc2/archive/v1.9.tar.gz |
| 62 | + |
| 63 | +The runtime library is responsible for implementing the core features of the |
| 64 | +object model, as well as exposing introspection features to the user. The |
| 65 | +GNUstep runtime implements Apple's Objective-C Runtime APIs, and a small number |
| 66 | +of GCC APIs for legacy compatibility. |
| 67 | + |
| 68 | +This library is based on the Étoilé Objective-C Runtime, an earlier research |
| 69 | +prototype, and includes support for non-fragile instance variables, |
| 70 | +type-dependent dispatch, and object planes. It is fully backwards compatible |
| 71 | +with the FSF's GCC 4.2.1 Objective-C ABI and also implements a new ABI that is |
| 72 | +supported by Clang and Étoilé's LanguageKit and is required for some of the |
| 73 | +newer features. |
| 74 | + |
| 75 | +If you come across any problems, please file them in the issue tracker: |
| 76 | + |
| 77 | +https://github.com/gnustep/libobjc2/issues |
0 commit comments