Custom calling conventions
turkeyman at gmail.com
Tue Feb 21 13:01:14 PST 2012
On 21 February 2012 22:35, Jacob Carlborg <doob at me.com> wrote:
> On 2012-02-21 20:45, Manu wrote:
>> On 21 February 2012 20:12, Jacob Carlborg <doob at me.com
>> <mailto:doob at me.com>> wrote:
>> On 2012-02-21 18:03, Manu wrote:
>> On 21 February 2012 16:59, Michel Fortin
>> <michel.fortin at michelf.com <mailto:michel.fortin at michelf.**com<michel.fortin at michelf.com>
>> I have some experience bridging Objective-C and D. I once
>> built a
>> complete wrapper system for Objective-C objects, each object
>> wrapped by a D one. It worked very well, but it generated so
>> bloat that it became unusable as soon as I started defining
>> classes for it to be useful. See the D/Objective-C bridge:
>> What was the primary cause of the bloat? I can't imagine my
>> causing any more bloat than the explicit jni call (or
>> equivalent) woudl
>> have otherwise.
>> Template bloat. Every call bridging D/Objective-C is made throw a
>> series of templates. This is for making it possible (less verbose)
>> to create bindings.
>> It might be possible to decrease the template bloat by having a tool
>> that automatically generates the bindings and outputs what the
>> templates do inline.
>> Why aren't the templates inline themselves? Although if the templates do
>> a lot of work, wouldn't that INCREASE the code volume?
>> I can't really imagine how Obj-C linkage could bloat so much, what was
>> involved? What did you have to do in addition to what a regular Obj-C
>> function call would have done?
> Michel Fortin explained this better in two of his answers. You can also
> read the documentation of my implementation, very similar to Michel's:
> But to give a quick example:
> class Foo : NSObject
> Foo foo ()
> return invokeObjcSelf!(Foo, "foo");
> Foo bar ()
> return invokeObjcSelf!(Foo, "bar");
> "invokeObjcSelf" is a template function that calls an Objective-C method.
> Basically each time "invokeObjcSelf" is called a new instantiation of the
> template is created and that is put in the symbol table. "invokeObjcSelf"
> then calls several more template functions making the template bloat
> increase exponentially.
But they should all be inlined, and the symbol table should be stripped,
which shouldn't leave anything in the end other than the inlined function
calling code, and in my examples, this will be basically the exact same
code that you'd have to write anyway to call through some vm's API...
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Digitalmars-d