gnustep-dev
[Top][All Lists]
Advanced

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

Re: ABI Compatibility (was Re: Installation woes for the average user...


From: Jens Ayton
Subject: Re: ABI Compatibility (was Re: Installation woes for the average user...)
Date: Fri, 22 May 2009 02:24:49 +0200

On May 21, 2009, at 11:47, David Chisnall wrote:

Only half of this is true. Apple only ships one version of its frameworks. Each framework, however, contains different versions of the libraries. You may have noticed all of the OS X version macros in the headers. Each of those defines the parts of the interface that are visible in a particular version of the framework, but they are also used when compiling. Each version of OS X has a Foundation.framework containing several libFoundation.dylib files, one compiled for compatibility with each previous version.

Oh, really? Have you taken the time to actually look? ;-)

The bundle structure used for frameworks in OS X is specifically designed to allow this (except the library binary is called Foundation, not libFoundation.dylib), but it isn’t used much, if at all. The Foundation framework, for instance, does not use this method, and neither does CoreFoundation (which implements the most fundamental Foundation classes).

In practice, the differences between different API versions is handled entirely using runtime checks. This can be seen in the public CFLite source code (see http://www.opensource.apple.com/ - no longer requires an account). The 10.4 versions of CFLite include the real implementation of the version checking function, _CFExecutableLinkedOnOrAfter(); 10.5 versions only have a stub.

The problem of fragile ivars is handled (in the 32-bit runtime) by not changing class layouts, or changing them but keeping sizes unchanged.


--
Jens Ayton





reply via email to

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