Custom calling conventions

Manu turkeyman at gmail.com
Tue Feb 21 15:13:31 PST 2012


On 21 February 2012 23:06, Jacob Carlborg <doob at me.com> wrote:

> On 2012-02-21 22:01, Manu wrote:
>
>> On 21 February 2012 22:35, Jacob Carlborg <doob at me.com
>>
>> <mailto: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>
>>        <mailto: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>
>> >
>>        <mailto: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 was
>>                    wrapped by a D one. It worked very well, but it
>>        generated so
>>                much
>>                    bloat that it became unusable as soon as I started
>>        defining
>>                enough
>>                    classes for it to be useful. See the D/Objective-C
>>        bridge:
>>        <http://michelf.com/projects/_**_____d-objc-bridge/<http://michelf.com/projects/______d-objc-bridge/>
>>        <http://michelf.com/projects/_**___d-objc-bridge/<http://michelf.com/projects/____d-objc-bridge/>
>> >
>>
>>        <http://michelf.com/projects/_**___d-objc-bridge/<http://michelf.com/projects/____d-objc-bridge/>
>>        <http://michelf.com/projects/_**_d-objc-bridge/<http://michelf.com/projects/__d-objc-bridge/>
>> >>
>>
>>        <http://michelf.com/projects/_**___d-objc-bridge/<http://michelf.com/projects/____d-objc-bridge/>
>>        <http://michelf.com/projects/_**_d-objc-bridge/<http://michelf.com/projects/__d-objc-bridge/>
>> >
>>        <http://michelf.com/projects/_**_d-objc-bridge/<http://michelf.com/projects/__d-objc-bridge/>
>>        <http://michelf.com/projects/**d-objc-bridge/<http://michelf.com/projects/d-objc-bridge/>
>> >>>>.
>>
>>
>>                What was the primary cause of the bloat? I can't imagine
>>        my proposal
>>                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:
>>
>>    http://www.dsource.org/__**projects/dstep/wiki/__**
>> ObjcBridge/BridgeInternals<http://www.dsource.org/__projects/dstep/wiki/__ObjcBridge/BridgeInternals>
>>
>>    <http://www.dsource.org/**projects/dstep/wiki/**
>> ObjcBridge/BridgeInternals<http://www.dsource.org/projects/dstep/wiki/ObjcBridge/BridgeInternals>
>> >
>>
>>    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...
>>
>
> Well, that's not what happen with templates.


... really? why?
You've just made me very very scared for my simd module :/

I've had a serious concern about D's lack of a force-inline for quite a
while...
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20120222/cfa80d0c/attachment.html>


More information about the Digitalmars-d mailing list