property syntax strawman

KennyTM~ kennytm at gmail.com
Sun Aug 2 01:51:22 PDT 2009


Walter Bright wrote:
> Having optional parentheses does lead to unresolvable ambiguities. How 
> much of a problem that really is is debatable, but let's assume it 
> should be resolved. To resolve it, a property must be distinguishable 
> from a regular function.
> 
> One way is to simply add a "property" attribute keyword:
> 
>   property bool empty() { ... }
>   property void empty(bool b) { ... }
> 
> The problem is that:
> 
> 1. there are a lot of keywords already
> 2. keywords are global things
> 

If the annotation (attribute) proposal is adopted (see DIP 6) then 
property can be considered a compile-time annotation (attribute) and no 
new global keyword is required.

@property @pure @const @nothrow bool empty() { ... }

or

attribute(property,pure,const,nothrow) bool empty() { ... }

> The alternative is to have a unique syntax for properties. Ideally, the 
> syntax should be intuitive and mimic its use. After much fiddling, and 
> based on n.g. suggestions, Andrei and I penciled in:
> 
>   bool empty { ... }
>   void empty=(bool b) { ... }
> 
> The only problem is when a declaration but not definition is desired:
> 
>   bool empty;
> 
> but oops! That defines a field. So we came up with essentially a hack:
> 
>   bool empty{}
> 
> i.e. the {} means the getter is declared, but defined elsewhere.
> 
> What do you think?

Ugly :)



More information about the Digitalmars-d mailing list