Skip to content

GNUstep Objective-C Runtime 1.9

Compare
Choose a tag to compare
@davidchisnall davidchisnall released this 26 Apr 08:18
· 379 commits to master since this release

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:

https://github.com/gnustep/libobjc2/issues