[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ANN: GNUstep Objective-C Runtime 1.6

From: David Chisnall
Subject: ANN: GNUstep Objective-C Runtime 1.6
Date: Thu, 24 Nov 2011 11:28:45 -0700
User-agent: Mutt/1.5.21 (2010-09-15)

Hi Everyone,

A little over one year after the 1.0 release, I'm happy to announce the 1.6 
release of the GNUstep Objective-C runtime.  This provides a superset of the 
functionality of Apple's Mac OS X 10.7 / iOS 5 runtimes and provides a solid 
foundation for Objective-C and Objective-C++ development on Free Software 
platforms.  The release announcement is at the end of this mail.

A few people need thanking for this release:

Sebastian Reitenbach, for his seemingly infinite patience helping me track down 
a couple of bugs that only showed up (reproducibly) on OpenBSD and for various 
build-system improvements that mean that this runtime can now be the default on 
OpenBSD and make life easier for other packagers.

Richard Frith-Macdonald, for ensuring that the GNUstep Make build system worked 
and transparently used the POSIX Make build system for bootstrapping.

Mathieu Suen for being the first person to test on win32 (a platform I have no 
access to, nor real interest in) and fixing build issues he found.

Riccardo Mottola, Justin Hibbits, for testing and reporting bugs (before the 

Julian Mayer for providing a demonstration of the capabilities of the runtime 
by using it for the GNU/Linux port of Core Breach, a game written for Apple 
systems, which makes extensive use of Objective-C 2 features, including blocks.

I've probably forgotten some people - sorry!


GNUstep Objective-C Runtime 1.6

This is the seventh official release of the GNUstep Objective-C runtime (a.k.a.
libobjc2).  This runtime was designed to support the features of Objective-C 2
for use with GNUstep and other Objective-C programs.  Highlights of this
release include:

- Compatibility with the new runtime APIs introduced with Mac OS X 10.7 / iOS 5.

- Support for small objects (ones hidden inside a pointer).  On 32-bit systems,
  the runtime permits one small object class, on 64-bit systems it permits 4.
  This is used by GNUstep for small NSNumber and NSString instances, and these
  are used by LanguageKit for message sending to small integers. 

- Support for prototype-style object orientation.  You can now add methods, as
  well as associated references, to individual objects, and clone them.  The
  runtime now supports everything required for the JavaScript object model,
  including the ability to use blocks as methods on x86, x86-64 and ARM.

- Support for Apple-compatible objc_msgSend() functions for x86, x86-64, and
  ARM.  Using these approximately halves the cost of message sending operations
  and results in a 10% smaller total binary size.  

- A fully maintained POSIX Makefile to make bootstrapping builds and packaging
  easier.  This will be used automatically if GNUstep Make is not installed.

- Improvements to the included LLVM optimisation passes.  Testing on a 2.8GHz
  Xeon, a loop of 200,000,000 class messages took 0.8 seconds with all
  optimisations enabled (including speculative inlining).  With -Os, the test
  took 2 seconds.  With explicit IMP caching in the source code, the test took
  1.2 seconds.  For reference, the same test using the GCC Objective-C runtime
  took 11 seconds (when compiled with either Clang/LLVM or GCC).

Various features of this release required some per-platform assembly code.  For
the 1.6.0 release, ARM, x86 and x86-64 (with the SysV ABI, not with the Win64
ABI) are supported.  Future releases in the 1.6.x series will extend this to
other architectures.  

You may obtain the code for this release from subversion at the following
subversion branch:


Alternatively, a tarball is available from:

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.

Although the runtime has been tested by several people, and is being used
extensively by the Étoilé project, it is relatively new code and may still
contain bugs.  If you come across any problems, please report them to the
GNUstep Developer mailing list <address@hidden>.  

reply via email to

[Prev in Thread] Current Thread [Next in Thread]