Custom calling conventions
doob at me.com
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 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>
> 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
> 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 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.
More information about the Digitalmars-d