On 2013-12-04 08:32:15 +0000, Jacob Carlborg <d...@me.com> said:

On 2013-12-04 04:47, Michel Fortin wrote:

- it's 32-bit-OS-X-only right now, iOS and 64-bit OS X both use a
different runtime which requires different codegen, and Apple has been
phasing out 32-bit for some time already

BTW, is there much difference between the modern runtime for 32bit and 64bit? I'm thinking, is things like the optimization of using the pointer for storing the data for types like NSNumber used on 32bit with the modern runtime?

The pointer magic for NSNumber is pretty much inconsequential: it just means you need to use the runtime functions everywhere, such as objc_getClass to get a pointer to the class object instead of dereferencing the object yourself. But it's a detail to keep in mind.

A big change in the modern runtime is that classes are completely non-fragile, in that you can add a member in a superclass without breaking binary compatibility with derived classes. Which means that instance variables are accessed differently, by checking a global constant to find the right offset (initialized when first loading the class). I think the compiler also has to emit that constant that the runtime will initialize.

Another big change is exception handling which now piggyback on the C++ exception mechanism instead of using the inefficient longjump implementation of the previous runtime.

There's an optimized path for calling certain methods using a virtual table, but we can skip that in a first release as it's an optimisation (objc_msgSend still work fine in every case).

Beside that, they changed all the section names for the binary output, and probably did a some alterations to the binary structure I'm forgetting right now.

--
Michel Fortin
michel.for...@michelf.ca
http://michelf.ca

Reply via email to