Beta D 2.069.0-b1

Steven Schveighoffer via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Thu Oct 15 08:48:47 PDT 2015


On 10/9/15 10:37 PM, Adam D. Ruppe wrote:
> On Saturday, 10 October 2015 at 02:31:51 UTC, Martin Nowak wrote:
>> nothing to warrant the invasive language feature @property is.
>
> There's no reason for @property to be invasive. ALL it needs to do is
> handle that one case, it shouldn't even be used anywhere else.
> Everything else is trivial or irrelevant.
>
> And the beauty of this is it won't even break any code.

I honestly couldn't care less about this.

What I don't like is arbitrary setter property abuse. e.g. 
somerange.find = needle;

My opinion:

Empty parens can always be omitted on functions, but need to be present 
in order to call delegates/function pointers.

@property function on struct/class method enables the instance.method = 
value; syntax. Otherwise, it's rejected (you must use 
instance.method(value); syntax). If I were defining it from scratch, I'd 
say you HAVE to use first syntax if it's marked @property, but I'm OK 
with allowing the normal syntax on @property methods.

Since we have @property, slapping it on a getter that returns a 
delegate/function pointer enables the behavior you want (why not?). 
&instance.prop I'm unsure what it should mean. I'm leaning towards that 
it means get a delegate to the property method itself, not the result of 
calling the property. This makes it behave differently than a field, but 
it already does this today.

@property on module level functions operate like methods, but allow UFCS 
calls. So:

0 params -> Obviously, like a getter (see above).
1 params -> Allow func = val syntax. Other syntaxes still allowed. 
Calling val.func syntax, if returning a delegate, I think should require 
the double parens, since IMO @property is for the setter syntax, not a 
description of a UFCS call.
2 params -> Allow firstParam.func = secondParam syntax. Other syntaxes 
still allowed.

-Steve


More information about the Digitalmars-d-announce mailing list