On Wednesday, 23 January 2013 at 17:47:44 UTC, H. S. Teoh wrote:
I'm starting to think that perhaps @property should be disposed of completely.

There is a problem @property can potentially solve: a property returning a callable.

alias void delegate() Callable;

struct test {
   @property Callable foo() { ... }
}

test t;
Callable c = t.foo; // should work
t.foo(); // should call the returned function
t.foo()(); // this should NOT work


Currently, t.foo()() DOES work and t.foo() gives the callable, without actually calling it (i.e. does not work as it should).

-property and the current @property implementation do not even try to address this.




My preferred solution is:

1) all functions without @property work exactly the same way they do now (optional parenthesis, callable as setters with =)

2) all functions with @property are ALWAYS rewritten so that a reference to them instead references the return value and/or the setter function.

So the result would be similar to #define t.foo (t.foo()). The type system then takes care of the parenthesis - no special code is required for syntax.

Reply via email to