Custom calling conventions
Jacob Carlborg
doob at me.com
Tue Feb 21 13:06:48 PST 2012
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>
> <mailto: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
> 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/>>>>.
>
>
> 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>
>
> 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.
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list