digitalmars.D - Re: D/Objective-C Preliminary Design
- Kagamin <spam here.lot> Nov 04 2010
- Michel Fortin <michel.fortin michelf.com> Nov 04 2010
- Jacob Carlborg <doob me.com> Nov 04 2010
Michel Fortin Wrote:I posted on my blog a preliminary document outlining what I intent to implement in DMD to support the Objective-C object model. <http://michelf.com/weblog/2010/dobjc-preliminary-design/> Comments?
Do you require explicit selector declaration? I'm afraid, this will lead to a large duplication: extern (Objective-C) class NSComboBox : NSTextField { private void* _dataSource; void insertItemWithObjectValue(ObjcObject object, NSInteger atIndex) [insertItemWithObjectValue:atIndex:]; void insertItemWithObjectValue(ObjcObject object) [insertItemWithObjectValue:]; } comboBox.insertItemWithObjectValue(val, idx); // [comboBox insertItemWithObjectValue:val atIndex:idx] comboBox.insertItemWithObjectValue(val); // [comboBox insertItemWithObjectValue:val] compiler can build selector automatically from function signature.
Nov 04 2010
On 2010-11-04 07:37:25 -0400, Kagamin <spam here.lot> said:Do you require explicit selector declaration? I'm afraid, this will lead to a large duplication: extern (Objective-C) class NSComboBox : NSTextField { private void* _dataSource; void insertItemWithObjectValue(ObjcObject object, NSInteger atIndex) [insertItemWithObjectValue:atIndex:]; void insertItemWithObjectValue(ObjcObject object) [insertItemWithObjectValue:]; } comboBox.insertItemWithObjectValue(val, idx); // [comboBox insertItemWithObjectValue:val atIndex:idx] comboBox.insertItemWithObjectValue(val); // [comboBox insertItemWithObjectValue:val] compiler can build selector automatically from function signature.
More or less. You need to specify the selector explicitly only if you need the function to have specific selector. Otherwise the compiler will generate one for you. The compiler-generated selector will ensure that function overloading works by adding the mangled parameter types. As an exception for property setters, the compiler will convert function 'name' to selector 'setName:' which should make properties work with key-value coding. For IBAction functions, it'll use directly the name of the function. So you should rarely have to specify the selector unless you're writing bindings to existing Objective-C objects. And, hopefully, creating bindings can be automated. -- Michel Fortin michel.fortin michelf.com http://michelf.com/
Nov 04 2010
On 2010-11-04 13:08, Michel Fortin wrote:On 2010-11-04 07:37:25 -0400, Kagamin <spam here.lot> said:Do you require explicit selector declaration? I'm afraid, this will lead to a large duplication: extern (Objective-C) class NSComboBox : NSTextField { private void* _dataSource; void insertItemWithObjectValue(ObjcObject object, NSInteger atIndex) [insertItemWithObjectValue:atIndex:]; void insertItemWithObjectValue(ObjcObject object) [insertItemWithObjectValue:]; } comboBox.insertItemWithObjectValue(val, idx); // [comboBox insertItemWithObjectValue:val atIndex:idx] comboBox.insertItemWithObjectValue(val); // [comboBox insertItemWithObjectValue:val] compiler can build selector automatically from function signature.
More or less. You need to specify the selector explicitly only if you need the function to have specific selector. Otherwise the compiler will generate one for you. The compiler-generated selector will ensure that function overloading works by adding the mangled parameter types. As an exception for property setters, the compiler will convert function 'name' to selector 'setName:' which should make properties work with key-value coding. For IBAction functions, it'll use directly the name of the function. So you should rarely have to specify the selector unless you're writing bindings to existing Objective-C objects. And, hopefully, creating bindings can be automated.
I already have a Ruby script/tool that automatically creates Objective-C bindings. But these bindings are not optimal (require some manual editing), it would also require to update the script for this syntax. But now I've stared on a new tool based on Clang that creates Objective-C bindings and it's working A LOT better then the Ruby script. Having the tool based on a complete frontend is a HUGE improvement and makes the development processes easier. -- /Jacob Carlborg
Nov 04 2010