Custom calling conventions

Jacob Carlborg doob at
Tue Feb 21 12:35:56 PST 2012

On 2012-02-21 20:45, Manu wrote:
> On 21 February 2012 20:12, Jacob Carlborg <doob at
> <mailto:doob at>> wrote:
>     On 2012-02-21 18:03, Manu wrote:
>         On 21 February 2012 16:59, Michel Fortin
>         <michel.fortin at <mailto:michel.fortin at>
>             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:
>         <
>         <>
>         <
>         <>>>.
>         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:

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.

/Jacob Carlborg

More information about the Digitalmars-d mailing list