Skip to content

Commit

Permalink
Update 2.0 release announcement.
Browse files Browse the repository at this point in the history
  • Loading branch information
davidchisnall committed Apr 28, 2018
1 parent 24984bf commit c5cc4b9
Showing 1 changed file with 19 additions and 57 deletions.
76 changes: 19 additions & 57 deletions ANNOUNCE
Original file line number Diff line number Diff line change
@@ -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
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.
This release introduces a new Objective-C ABI, which is designed to be forward
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
usage on the fast path.
The runtime will now use the new ABI's data structures internally and will
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
blocks to be used as methods, no longer requires physical pages to be mapped
both writeable and executable.
The new ABI provides better run-time introspection metadata and smaller
binaries. When used with the new ABI, this version of the runtime will consume
less memory than the previous release.

- 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.x branch:
You may obtain the code for this release from git and use the 2.0 branch:

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

Alternatively, a tarball is available from:

https://github.com/gnustep/libobjc2/archive/v1.x.zip
https://github.com/gnustep/libobjc2/archive/v1.x.tar.gz
https://github.com/gnustep/libobjc2/archive/v2.0.zip
https://github.com/gnustep/libobjc2/archive/v2.0.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 Apple's Objective-C Runtime APIs, and a small number
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.
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:

Expand Down

0 comments on commit c5cc4b9

Please sign in to comment.