You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
3.9 KiB
Plaintext
89 lines
3.9 KiB
Plaintext
GNUstep Objective-C Runtime 2.0
|
|
===============================
|
|
|
|
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.
|
|
|
|
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. Highlights include:
|
|
|
|
- The linker now removes duplicate selectors within a library.
|
|
|
|
- The linker will remove duplicate protocol definitions within a library.
|
|
|
|
- Protocols and classes are now always accessed via an indirection layer, so
|
|
they can be extended by future versions of the ABI without breaking
|
|
compatibility.
|
|
|
|
- Categories can include property metadata and both categories.
|
|
|
|
- Constant strings are now emitted with a richer structure, which provides
|
|
faster hashing and better unicode support.
|
|
|
|
- Instance variable metadata includes size and alignment, allowing better object
|
|
layout and more accurate introspection. Instance variable metadata now
|
|
includes more accurate information about ARC ownership semantics.
|
|
|
|
- Method metadata now includes extended type information, allowing bridged
|
|
languages to understand the class that methods expect and not just the fact
|
|
that they take an object. This was previously an obstacle to supporting
|
|
JavaScriptCore's Objective-C bridge with GNUstep.
|
|
|
|
In addition to the new ABI, there are several improvements on Windows:
|
|
|
|
- The runtime now uses SEH-based exception handling on Windows. This
|
|
interoperates with C++ exceptions in libraries compiled with MSVC or
|
|
MSVC-compatible compilers.
|
|
|
|
- All of the assembly code paths now fully support i386 and x64 Windows.
|
|
|
|
- Object allocations on 32-bit Windows now use `_aligned_malloc` to guarantee
|
|
sufficient alignment for AVX vectors in instance variables.
|
|
|
|
- The runtime now uses fibre-local storage and critical sections on Windows,
|
|
improving performance in multithreaded workloads on Windows.
|
|
|
|
- Public runtime functions are now marked dllexport, so the runtime can be built
|
|
as objc.dll on Windows.
|
|
|
|
**WARNING**: The new ABI is currently incompatible with incremental linking on
|
|
Windows, so projects built with Microsoft's linker must disable incremental
|
|
linking.
|
|
|
|
Note: Microsoft's WinObjC project contains a friendly fork of this library that
|
|
includes a work around for the incremental linking issue. If you wish to use
|
|
incremental linking on Windows, please use that version. A subsequent version
|
|
of clang and link.exe should include a fix that will make it possible to use
|
|
this version with incremental linking.
|
|
|
|
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 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.
|
|
|
|
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/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 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
|