GNUstep Objective-C Runtime 2.2 =============================== 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: https://github.com/gnustep/libobjc2.git Alternatively, a tarball is available from: https://github.com/gnustep/libobjc2/archive/v2.2.zip https://github.com/gnustep/libobjc2/archive/v2.2.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 a superset of Apple's Objective-C Runtime APIs. If you come across any problems, please file them in the issue tracker: https://github.com/gnustep/libobjc2/issues