D/Objective-C, extern (Objective-C)
Jacob Carlborg
doob at me.com
Wed Jun 26 08:33:27 PDT 2013
On 2013-06-26 13:07, Sönke Ludwig wrote:
> I agree, it will only influence tools that include a parser. Few syntax
> highlighters parse the code (although *some* do), so this was probably
> not the best example.
Absolutely, some even do semantic analyze. Example, the syntax
highlighter in Eclipse for Java highlights instance variables
differently from identifiers. Don't know if there's any syntax
highlighters for D that do this.
> Naively I first thought that .class and .protocolof were candidates for
> __traits, but actually it looks like they might simply be implemented
> using a templated static property:
>
> class ObjcObject {
> static @property ProtocolType!T protocolof(this T)() {
> return ProtocolType!T.staticInstance;
> }
> }
So what would ProtocolType do? I think I need to look at the
implementation of .class and .protocolof. In Objective-C there are
runtime functions to do the same, I don't know if those would work for D
as well.
> That's of course assuming that the static instance is somehow accessible
> from normal D code. Sorry if this doesn't really make sense, I don't
> know anything of the implementation details.
>
> The __selector type class might be replaceable by a library type
> Selector!(R, ARGS).
Hmm, that might be possible. We would need a trait to get the selector
for a method, which we should have anyway. But this uses templates
again. We don't want to move everything to library code then we would
have the same problem as with the bridge.
> It would also be great to have general support for
> implicit constructors and make string->NSString and delegate->ObjcBlock
> available in the library instead of dedicated compiler special case.
Since strings and delegates are already implemented in the language,
would it be possible to add implicit conversions for these types in the
library?
> Not sure about constructors in interfaces, they seem a bit odd, but
> using "init" instead and letting "new" call that is also odd...
Using "alloc.init" would be more Objective-C like and using "new" would
be more D like.
> You already mentioned @IBAction and @IBOutlet, those can obviously be
> UDAs, as well as @optional and other similar keywords.
The compiler will need to know about @optional. I don't think that the
compiler will need to know about @IBAction and @IBOutlet, but if it
does, there are a couple of advantages we could implement. @IBOutlet
only make sense on instance variables. @IBAction only make sense on
instance method with the following signature:
void foo (id sender) { }
Possibly any Objective-C type could be used as the argument type.
> Maybe it's possible like this to reduce the syntax additions to
> extern(Objective-C) and possibly constructors in interfaces.
I'm open to suggestions.
> I don't mean the additions as a whole of course, but each single
> language change vs. a library based solution of the same feature ;) In
> general this is a great addition from a functional view! I was very much
> looking forward for it to get back to life.
Great. It's just a question of what is possible to implement in library
code.
--
/Jacob Carlborg
More information about the Digitalmars-d-announce
mailing list