Leandro Lucarella wrote: > Daniel Keep, el 27 de julio a las 01:09 me escribiste: >> >> Leandro Lucarella wrote: >>> Nick Sabalausky, el 24 de julio a las 00:39 me escribiste: >>>> An alternate usage/definition syntax for properties. >>>> >>>> http://prowiki.org/wiki4d/wiki.cgi?LanguageDevel/DIPs/DIP4 >>>> >>>> Note that there are a few parts marked NEED HELP, that could use >>>> assistance >>>> from someone with more expertise in this than me. >>> After reading all the threads again, I think the best proposal is the >>> opGet_foo() / opSet_foo() for diferentiating functions and properties. >>> I think is the more D-ish solution. >>> >>> I don't like the "_name" though, because it adds semantic infomation to >>> the identifier, maybe a more template-like syntax can be used: >> That would involve changing template syntax to allow for identifiers to >> be passed as an argument. >> >> Besides, templates can't be used as virtual methods, so they can't be >> overridden and can't appear in interfaces. > > Syntax don't have to be changed, unless templates are not allowed > (syntactically) in interfaces (I'm too lazy to check right now :). > > And template syntax don't have to change either. This is already valid > AFAIK syntax AFAIK. What it has to be changed, is the semantics, because > int opGet(foo)(); should be interpreted as a read property instead of > a templated function.
Ok, I should have said "semantics" instead of syntax. The thing is you're proposing that template syntax doesn't *actually* mean a template if the identifier is "opGet". opGet effectively becomes a keyword; so you may as well just bite the bullet and add "property" as a keyword. >>> ... >>> >>> I used an example without trivial properties because... well, you just use >>> member variables for that. That's why I don't see real value in adding >>> default properties getter/setters. >> interface I >> { >> int opGet_value(); >> } >> >> You cannot use fields in an interface. > > Yes, and...? You have an interface. One of the things it needs to do is provide access to a field. You can't just declare a field; you have to have an accessor. In most situations, the implementation will simply want to expose some internal field.