On 2013-12-04 08:32:15 +0000, Jacob Carlborg <[email protected]> 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
[email protected]
http://michelf.ca