Ary Borenszweig escribió:
Andrei Alexandrescu escribió:
Marianne Gagnon wrote:
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?

I liked the original idea... but this declaration syntax is a total can of worms. Like others pointed out, would the compiler automatically turn all functions with empty bodies into declarations? Would empty setters be considered a declaration? What if I actually *want* to use an empty body as definition? Or what if I accidentally leave a body empty when I didn't want to?

Like someone else pointed out, existing keywords could be reused :

bool empty
{
    in(bool value)
    {
        _my_empty = value;
    }
    out
    {
        return _my_empty;
    }
}

I like this quite a bit. I never wrote any compiler, granted, but I don't think it'd be that hard to implement - and doesn't introduce any new keyword.

Please, please, could we look at something that does NOT go through two scopes to get to the code?

Or, alternatively, if you really wish to keep them separate, bool empty= { ... } isn't intuitive, as Andrei pointed out, but is already less error-prone than the empty-body declaration idea I believe

I think void empty=(bool b) { ... } is a net win, which the forced bool empty=() diminishes. It would be great to keep the setter and find something as nice for a getter.


Andrei

int =empty() { } // getter
int empty=(int value) { } // setter

Hmm... where's the "undo send" button? I can't find it... I saw it in gmail, but why isn't it here?

Reply via email to