DIP23 draft: Fixing properties redux
David Nadlinger
see at klickverbot.at
Sun Feb 3 20:00:21 PST 2013
On Monday, 4 February 2013 at 03:15:51 UTC, David Nadlinger wrote:
> On Monday, 4 February 2013 at 03:11:25 UTC, Andrei Alexandrescu
> wrote:
>> I really think you are wrong about this. Parenthesizing has
>> nothing to do with this. &a.b is punctuation that creates an
>> indivizible unit.
>
> a.b already is an indivisible unit, the result of the function
> call.
Actually, let me illustrate this point a bit further, sorry for
the hasty reply.
The problem I see is that usually, one can insert grouping pairs
of parentheses into an expression according to the operator
precedence/associativity rules at will without changing the
result. This isn't merely a theoretical exercise, but the way
(well, in the form of trees) I tend to reason about source code
intuitively.
Now, grouping the expression »&a.b« according to the precedence
rules yields »&(a.b)« – but in your proposal, they mean
completely different things.
You could argue that &<expression>.<identifier> is a special
construct different from the normal address-of operator. But
where do you mentally draw the line? What about &a.b.c <->
&(a.b).c <-> &((a.b).c)? &(a + b).c <-> &((a + b).c)?
Again, from an user's perspective the change in behavior seems to
be completely at odds with the usual rule in C-family languages
that grouping parens can be added without changing the meaning of
an expression. Thus, this part of the proposed syntax strikes me
as being extremely misleading, which is especially bad because
the situation with the two possible meanings is confusing enough
to start out with already.
And how often do you think you'll find yourself in the situation
of needing to get a delegate from a property anyway? Can't we
just make »@property getter expressions are always equivalent to
their return value« a hard (simple!) rule and add something like
__traits(propertyGetter, ...) for the rare cases where you really
need to get hold of the underlying function?
David
More information about the Digitalmars-d
mailing list