How to use D for cross platform development?

Jacob Carlborg doob at me.com
Thu Mar 29 09:36:55 PDT 2012


On 2012-03-29 14:44, Chris W. wrote:

> Thanks for the link. Objective-C is basically C and can be implemented
> in C style as far as I know. Is it worth going down to the C level like so:

Yes that would be possible.

> struct NSObject {
> struct objc_class* isa;
> }
> struct objc_class {
> Class isa;
> Class super_class;
> const char *name;
> long version;
> long info;
> long instance_size;
> struct objc_ivar_list *ivars;
> struct objc_method_list **methodLists;
> struct objc_cache *cache;
> struct objc_protocol_list *protocols;
> }
>
> Just a random thought.

That's the alternative approach, I've done that as well. It's very 
tedious and becomes verbose very fast.

Both I and Michel have created an Objective-C/D bridge that uses this 
approach. It lets you call Objective-C methods, create instances of 
Objective-C classes, create subclasses in D that inherit from 
Objective-C classes and so on. It did this all automatically. The 
problem with the bridge was the enormous template bloat. A GUI Hello 
World application takes around 60MB with the bridge.

http://www.dsource.org/projects/dstep
http://michelf.com/projects/d-objc-bridge/

That's why Michel started the DMD fork to directly support binding to 
Objective-C classes and methods.

If you just have a small amount of Objective-C code that needs to be 
called and basically never changes then it won't be a problem using the 
Objective-C runtime functions. Otherwise I wouldn't recommend it.

I've ported the SDL initialization code for Mac OS X to D, to be used in 
derelict. This doesn't contain any fancy templates like the bridge uses 
to help making the code less verbose. It's quite a lot of D code 
compared to the Objective-C code:

http://dsource.org/projects/derelict/browser/branches/Derelict2/DerelictSDL/derelict/sdl/macinit

This would be the original Objective-C code:

http://codespeak.net/svn/pypy/dist/pypy/rlib/rsdl/macosx-sdl-main/SDLMain.m

If you're going with this approach you could have a look at my bridge if 
you need help, it has some useful documentation of how it works and is 
implemented:

http://www.dsource.org/projects/dstep/wiki/ObjcBridge/BridgeInternals

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list