D-Cocoa Port

Rizo Isrof rizo at odis-project.org
Wed Apr 18 07:39:10 PDT 2012


On Friday, 13 April 2012 at 14:28:05 UTC, Jacob Carlborg wrote:
> On 2012-04-13 15:34, Rizo Isrof wrote:
>> Hi,
>>
>> I am planning to use D for creating native applications on Mac 
>> OS X. For
>> that, of course, D must interact with the Cocoa API. I have no 
>> knowledge
>> of how this bindings could be done. I've already looked at 
>> Cocado[1] and
>> do know the Michel Fortin's D-ObjC bridge[2], and would like 
>> to be
>> enlightened about some details:
>> * What is their (or any other possible) approach of porting 
>> Cocoa to D?
>> -- here I essentially ask for technical reading sources
>> (books/articles/references, etc);
>
> There are three ways (two deepening on how you look at it).
>
> 1. Use the Objective-C runtime manually, which is implement 
> with regular C functions.
>
> https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html
>
> 2. Use a bridge that handles everything nicely. The bridge uses 
> the same implementation as in the first way. The bridge also 
> performs type conversions automatically and other things to 
> ease the development.
>
> http://www.dsource.org/projects/dstep
> http://michelf.com/projects/d-objc-bridge/
>
> 3. Implement direct support in the language to be compatible 
> with Objective-C. This is what Michel Fortin did here:
>
> http://michelf.com/projects/d-objc/
> (Note, this is not a bridge)
>
> He forked DMD and added support for extern(Objective-C) which 
> will output code similar to what GCC/Clang would do. This is a 
> more direct way to interface with Objective-C and won't add any 
> more overhead than using Objective-C directly would. I guess 
> this would mean the ABI's are compatible.
>
>> * Is it possible to establish an ABI compatibility with ObjC 
>> directly or
>> through the C ABI? -- There's a question on _stackoverflow_[3] 
>> where the
>> answers describe what could be achieved with Objective-C's 
>> Runtime
>> Reference[4];
>
> Both are possible, see above.
>
>> * Is it feasible to make this kind of stuff work nicely and 
>> get the
>> level of performance and stability like, e.g., with Qt 
>> framework on Mac
>> OS X?
>
> I think so if you use Michel's fork of DMD.
>
>> I have no experience at all in this field so forgive me any 
>> technical
>> faults. Any help would be appreciable.
>>
>> Thanks in advance for your responses.
>
> I think the best way is to use the third one mentioned in the 
> list above. Note that this is based on an older version of DMD. 
> The project is not finished yet and is currently on old. 
> Although an alpha version has been released.
>
> The problem with a bridge is the it cause way to much bloat. A 
> Hello World application written using a bridge generated a 60MB 
> executable.
>
> Using the Objective-C runtime manually is just too verbose and 
> tedious. If you are interested in this you can have a look at 
> my documentation of how my Objective-c/D bridge works and is 
> implemented:
>
> http://www.dsource.org/projects/dstep/wiki/ObjcBridge/BridgeInternals
>
>> [1]: http://sourceforge.net/projects/cocodao/
>> [2]: http://michelf.com/projects/d-objc/
>
> Note, this is not a bridge. This is third one mentioned in the 
> list above.
>
>> [3]: 
>> http://stackoverflow.com/questions/5901508/calling-cocoa-apis-from-c
>> [4]:
>> http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html
>>
>>
>> - Rizo

Thank you for such a detailed overview of the existing approaches 
- it helped me a lot to understand the theory. As you suggested, 
I will probably use a modified version of the compiler for tests. 
But in order to fully understand the implementation details I 
will try to write my own  extension of D for LDC with 
`extern(Objective-C)` support.

Thanks again for you answer.

- Rizo



More information about the Digitalmars-d-learn mailing list