|
|
|
@ -1,76 +1,38 @@
|
|
|
|
GNUstep Objective-C Runtime 1.x
|
|
|
|
GNUstep Objective-C Runtime 2.0
|
|
|
|
===============================
|
|
|
|
===============================
|
|
|
|
|
|
|
|
|
|
|
|
This the ninth official release of the GNUstep Objective-C runtime (a.k.a.
|
|
|
|
This the second major release of the GNUstep Objective-C runtime (a.k.a.
|
|
|
|
libobjc2). This runtime was designed to support the features of modern
|
|
|
|
libobjc2). This runtime was designed to support the features of modern
|
|
|
|
dialects of Objective-C for use with GNUstep and other Objective-C programs.
|
|
|
|
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
|
|
|
|
This release introduces a new Objective-C ABI, which is designed to be forward
|
|
|
|
for message sending.
|
|
|
|
compatible with future changes and removes a large number of hacks that were
|
|
|
|
|
|
|
|
required for compatibility with the prior ABI that included features introduced
|
|
|
|
|
|
|
|
in the 1980s.
|
|
|
|
|
|
|
|
|
|
|
|
- Improved the dispatch table representation to improve performance and cache
|
|
|
|
The runtime will now use the new ABI's data structures internally and will
|
|
|
|
usage on the fast path.
|
|
|
|
automatically upgrade on-disk structures from old ABIs when used with the old
|
|
|
|
|
|
|
|
ABI. As a result, memory usage will be higher when using the old ABI and users
|
|
|
|
|
|
|
|
who are unable to recompile their code may prefer to stick with the 1.9.x
|
|
|
|
|
|
|
|
release series. Mixing libraries compiled with the old and new ABIs is not
|
|
|
|
|
|
|
|
supported and will abort at run time.
|
|
|
|
|
|
|
|
|
|
|
|
- The implementation of `imp_implementationWithBlock`, the function that allows
|
|
|
|
The new ABI provides better run-time introspection metadata and smaller
|
|
|
|
blocks to be used as methods, no longer requires physical pages to be mapped
|
|
|
|
binaries. When used with the new ABI, this version of the runtime will consume
|
|
|
|
both writeable and executable.
|
|
|
|
less memory than the previous release.
|
|
|
|
|
|
|
|
|
|
|
|
- Numerous improvements to the interaction between runtime functions and ARC.
|
|
|
|
You may obtain the code for this release from git and use the 2.0 branch:
|
|
|
|
|
|
|
|
|
|
|
|
- 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.x branch:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
https://github.com/gnustep/libobjc2.git
|
|
|
|
https://github.com/gnustep/libobjc2.git
|
|
|
|
|
|
|
|
|
|
|
|
Alternatively, a tarball is available from:
|
|
|
|
Alternatively, a tarball is available from:
|
|
|
|
|
|
|
|
|
|
|
|
https://github.com/gnustep/libobjc2/archive/v1.x.zip
|
|
|
|
https://github.com/gnustep/libobjc2/archive/v2.0.zip
|
|
|
|
https://github.com/gnustep/libobjc2/archive/v1.x.tar.gz
|
|
|
|
https://github.com/gnustep/libobjc2/archive/v2.0.tar.gz
|
|
|
|
|
|
|
|
|
|
|
|
The runtime library is responsible for implementing the core features of the
|
|
|
|
The runtime library is responsible for implementing the core features of the
|
|
|
|
object model, as well as exposing introspection features to the user. The
|
|
|
|
object model, as well as exposing introspection features to the user. The
|
|
|
|
GNUstep runtime implements Apple's Objective-C Runtime APIs, and a small number
|
|
|
|
GNUstep runtime implements a superset of Apple's Objective-C Runtime APIs.
|
|
|
|
of GCC APIs for legacy compatibility.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This library is based on the Étoilé Objective-C Runtime, an earlier research
|
|
|
|
|
|
|
|
prototype, and includes support for non-fragile instance variables,
|
|
|
|
|
|
|
|
type-dependent dispatch, and object planes. It is fully backwards compatible
|
|
|
|
|
|
|
|
with the FSF's GCC 4.2.1 Objective-C ABI and also implements a new ABI that is
|
|
|
|
|
|
|
|
supported by Clang and Étoilé's LanguageKit and is required for some of the
|
|
|
|
|
|
|
|
newer features.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If you come across any problems, please file them in the issue tracker:
|
|
|
|
If you come across any problems, please file them in the issue tracker:
|
|
|
|
|
|
|
|
|
|
|
|
|