On 2012-10-16 19:57, Ethan wrote:
I'm just going to throw it out there that you don't actually need to
touch Objective-C at all. Cocoa/Foundation/all those Objective-C
interfaces sit on top of something known as Core Foundation, which are C
APIs. The pointers used by Core Foundation can generally be used as
Objective-C objects of the same type as well.

That's not entirely correct. Most of the types in Core Foundation are a toll free bridge to the corresponding Objective-C types in the Foundation framework. But all the GUI related classes, i.e. AppKit, are not available in the same way.

It would be handy to have a D binding to all the Core- libraries on OSX.
I might do that myself when I get my Mac if such a binding doesn't
already exist. The book should be equally applicable for iOS as well,
but last time I was in iOS land I was still a newbie to the whole OSX
programming thing.

If you're going to write GUI applications on Mac OS X you need to interact with the Objective-C frameworks. The reason for this is that, as stated above, AppKit is only available from Objective-C and you really need to be able to create your own Objective-C classes and subclasses.

There are two ways to interact with Objective-C

* Create an Objective-C/D bridge
* Make D binary compilable with Objective-C

The Objective-C/D bridge would use the Objective-C runtime functions defined in C to interact with Objective-C. Every time an object is passed over the bridge it needs to be encapsulated or de-encapsulated. Another problem is the code/template bloat. A Hello World application will be around 60MB in size. This has already been done:

http://www.dsource.org/projects/dstep

The other approach would be to make D binary compaitable with Objective-C, that is, provide extern (Objective-C) declarations. This would generate basically the same code as the Objective-C compiler would, but with the nice syntax of D instead of the horrible syntax that Objective-C is. This would also allow you do create bindings to Objective-C classes, methods and functions just as with C.

The problem with this approach, it's a lot of work to modify the compiler. But that has already been done as well:

http://michelf.ca/projects/d-objc/

This fork of DMD isn't ready yet (there's an alpha available) and there hasn't been any changes made in over a year. If I recall correctly, Michel Fortin said he hasn't got the time now to work on this. It also the problem with always playing catchup with the upstream version of DMD.

--
/Jacob Carlborg

Reply via email to