|
| 1 | +GNUstep Objective-C Runtime 2.1 |
| 2 | +================================= |
| 3 | + |
| 4 | +This is the first update to the second major release of the GNUstep Objective-C |
| 5 | +runtime (a.k.a. libobjc2). This runtime was designed to support the features |
| 6 | +of modern dialects of Objective-C for use with GNUstep and other Objective-C |
| 7 | +programs. |
| 8 | + |
| 9 | +*NOTE:* This is the first release to use submodules. If you are downloading |
| 10 | +the sources from git, please make sure that you do a recursive clone. If you |
| 11 | +forget, the build system will give you instructions to correct this. |
| 12 | +Tarballs from GitHub do not include submodules, so if you are downloading the |
| 13 | +tarball then you will need to download the submodule separately. |
| 14 | + |
| 15 | + |
| 16 | +Highlights of this release include: |
| 17 | + |
| 18 | +- Numerous improvements to the Objective-C++ exception interoperation code. |
| 19 | + The runtime now dynamically detects whether the libcxxrt or libsupc++ variant |
| 20 | + of the Itanium C++ Exception ABI is being used |
| 21 | + |
| 22 | +- Sending a message to `super` where the corresponding method did not exist was |
| 23 | + silently ignored in previous versions of the runtime. This now correctly |
| 24 | + invokes the forwarding hooks and so (with an implementation of the Foundation |
| 25 | + framework, such as GNUstep Base or WinObjC) will trigger an exception or |
| 26 | + invoke `forwardInvocation:`. |
| 27 | + |
| 28 | +- The checks for overloaded memory management methods were incorrect, causing |
| 29 | + some classes to be incorrectly opted into ARC fast paths. These checks are |
| 30 | + now correct. |
| 31 | + |
| 32 | +- Several memory management bugs in corner cases of weak reference management |
| 33 | + were fixed. |
| 34 | + |
| 35 | +- The ARM assembly implementation of `objc_msgSend` now correctly restores the |
| 36 | + stack after calling a forwarding implementation. This bug caused stack |
| 37 | + corruption and usually crashing on ARM. |
| 38 | + |
| 39 | +- The ARC code has been rewritten as C++, using a well-tested third-party |
| 40 | + Robin-Hood hash table to store weak references, replacing the home-grown |
| 41 | + version. This improves performance and reduces the likelihood of bugs |
| 42 | + arising from the hash table implementation. |
| 43 | + |
| 44 | +- Control Flow Guard (CGF) checks were added on Windows on x86 (32- and |
| 45 | + 64-bit). If Objective-C code is compiled with CFG enabled then |
| 46 | + `objc_msgSend` will crash if it attempts to jump to an address that is not a |
| 47 | + valid function entry point. |
| 48 | + |
| 49 | +- The function signatures in the blocks headers were updated for compatibility |
| 50 | + with recent macOS releases. |
| 51 | + |
| 52 | +- Support for the C11 _Atomic type qualifier in property metadata was added. |
| 53 | + |
| 54 | +You may obtain the code for this release from git and use the 2.1 branch: |
| 55 | + |
| 56 | +https://github.com/gnustep/libobjc2.git |
| 57 | + |
| 58 | +Alternatively, a tarball is available from: |
| 59 | + |
| 60 | +https://github.com/gnustep/libobjc2/archive/v2.1.zip |
| 61 | +https://github.com/gnustep/libobjc2/archive/v2.1.tar.gz |
| 62 | + |
| 63 | +The submodule is available from: |
| 64 | + |
| 65 | +https://github.com/Tessil/robin-map/archive/757de82.zip |
| 66 | +https://github.com/Tessil/robin-map/archive/757de82.tar.gz |
| 67 | + |
| 68 | +This will extract as robin-map-757de829927489bee55ab02147484850c687b620. |
| 69 | +You must move the contents of that directory into third_party/robin_map in the |
| 70 | +libobjc2 tree. |
| 71 | + |
| 72 | + |
| 73 | +The runtime library is responsible for implementing the core features of the |
| 74 | +object model, as well as exposing introspection features to the user. The |
| 75 | +GNUstep runtime implements a superset of Apple's Objective-C Runtime APIs. |
| 76 | + |
| 77 | +If you come across any problems, please file them in the issue tracker: |
| 78 | + |
| 79 | +https://github.com/gnustep/libobjc2/issues |
0 commit comments