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
If you come across any problems, please file them in the issue tracker: