This is the second update to 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:
Initial support for RISC-V 64-bit (rv64) including an architecture-specific
objc_msgSend, and block trampoline implementation. Please note that
double-precision floating-point support (rv64d) is required for the
objc_msgSend implementation.
Initial support for Windows on ARM64 with fast-path objc_msgSend.
Numerous improvements to the Objective-C++ exception interoperation code.
The runtime now dynamically detects whether the libcxxrt, libsupc++, or
libc++abi variant of the Itanium C++ Exception ABI is being used. This is
the first version to support exception interoperability with libc++abi.
Because we no longer need to identify the specific C++ runtime, we can link
to it indirectly via the C++ standard library, which enables more C++ to be
used in the Objective-C runtime.
The minimum CMake version has been bumped to 3.16, which supports
Objective-C. This support is now used, simplifying the build.
Support for GC mode is gone. Apple dropped support for this a long time ago.
objc_setUncaughtExceptionHandler is added, which avoids consuming code
needing to access a library-owned global.
The selector-table code has been rewritten in C++, improving performance of
adding selectors. This is unlikely to have a measurable impact on
performance outside of contrived test cases, but the new code is more
maintainable.
Several bug fixes in the ARC code, especially in corner cases surrounding
weak references.
Support for fast-path allocation / initialisation functions. Root classes
that opt into this should implement +_TrivialAllocInit (this can be an
empty method, it is not called). Clang 18 or later will emit calls to the
fast-path functions for +alloc, +allocWithZone: and +alloc + -init
calls. This should improve code density as well as performance.
You may obtain the code for this release from git and use the 2.2 branch:
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 a superset of Apple's Objective-C Runtime APIs.
If you come across any problems, please file them in the issue tracker: