[Top][All Lists]

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

Re: ANN: GNUstep 2.6.0 for openSUSE 11.4

From: Nat!
Subject: Re: ANN: GNUstep 2.6.0 for openSUSE 11.4
Date: Wed, 15 Jun 2011 11:16:45 +0200

Am 15.06.2011 um 10:39 schrieb David Chisnall:

> On 14 Jun 2011, at 23:19, Nat! wrote:
>> Am 14.06.2011 um 23:47 schrieb David Chisnall:
>>> On 14 Jun 2011, at 22:38, Nat! wrote:
>>>> Hmm interesting, though I don't see offhand, why dividing  what 
>>>> objc_msgSend does  into separate steps makes it inherently more portable. 
>>>> I will have to look into my code, to see if its feasible to roll my own 
>>>> objc_msgSend, (because I use it a lot as I found out :) ).
>>> objc_msgSend() is a trampoline function.  It must pass all of its arguments 
>>> to the called IMP.  This is not possible in C.  Apple implements a version 
>>> of it in assembly for every calling convention, for every architecture, and 
>>> for every platform that they support (currently, this comes to about a 
>>> dozen implementations, and they support a very narrow range of platforms 
>>> compared to GNUstep).
>> Ah I see. I hope, that if I reduce the scope to a small fixed number of id 
>> parameters, I can get by. 
> It's really better to just call class_getMethodImplementation() and call the 
> returning IMP.  This code will work everywhere, and the performance 
> difference between using it and using objc_msgSend() is tiny.

It's more of an experiment porting my stuff to GNUstep, so your advice 
nonwithstanding I think my plan, will work, because I believe I only use it 
objc_msgSend for simple calls (max. one or two id parameters and return value). 
Otherwise I would have to change a lot of source.

>>>> Ah and one more question, regarding forwarding is __objc_msg_forward 
>>>> (instead of __objc_msg_forward2) ever really used or can I ignore it, when 
>>>> I run atop a current runtime ?
>>> The forwarding hooks that are used depend on the runtime. See 
>>> GSFFIInvocation.m for how they are all used.  
>> Is there some exported #define (like OBJC_API_VERSION) that could be 
>> checked, which runtime I am compiling against ? 
> Not really.  GCC 4.6 and later define something.  The GNUstep Runtime defines 
> __GNUSTEP_RUNTIME__ in objc/runtime.h and then provides a set of capability 
> flags in objc/caps.h to let you check at compile time and run time which 
> capabilities the runtime that you are using supports.

Hmm, this could indicate that I _do_ have the wrong set of headers. In 
/usr/lib/gcc/i586-suse-linux/4.5/include/objc I neither see caps.h nor 
But it's not a big problem, for my experiments I can live without them.

> ... then you are almost certainly doing something very, very wrong.
Hey, I would prefer to think of it as almost certainly doing something very, 
very clever :)

Thanks for all the help
A good dog, though a fool. 
Who wants a smart dog!  -- R.A. Lafferty

reply via email to

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