[phobos] phobos commit, revision 1689

Andrei Alexandrescu andrei at erdani.com
Thu Jun 24 10:15:20 PDT 2010


On 06/24/2010 11:11 AM, Steve Schveighoffer wrote:
> And as far as "design by newsgroup" I think almost all the new
> features were vetted on the newsgroup at one point, including inout.
> It's unfair to simply point to ones you disagree with as evidence of
> failure ;)

I was referring to those that have arguably shown themselves to be failures.

> In defense of @property, I think we all agree we needed something to
> distinguish setters from single-arg functions.  I think with a
> reasonable rule, we can allow calling no-arg functions without parens
> (via a proposal I made earlier that as long as the function returns
> void, it should be allowed).

Fine, though that leaves writeln = 5; on the table.

> All that's left is actual property
> getters.  I can't say enough that @property in those cases has
> nothing to do with functionality and everything to do with human
> interpretation.  Like it or not, the use of parentheses is an
> extension of the function name, whose semantic meaning of course is
> unenforceable.  But just allowing the user to decide whether
> something is a property or a function leaves the interpretation up to
> the user, taking all the power away from the author who wrote the
> function.  @property is a clarification tool, and by necessity, is
> implemented via convention rather than compiler enforcement.

I've heard this argument before. I acknowledge there is a need to 
address unpleasant corner cases such as functions that return functions 
or delegates. What I'm saying is that the feature as designed hurts most 
for the benefit of a couple tiny corner cases. I've seen that several 
times in several language before. It's called bad design.

What I'm seeing in the field after faithfully using @property for a 
while fits my worst predictions:

1. Code is sprinkled with @property so there's more syntactic noise to 
introduce and to deal with;

2. Whenever I define some function I need to make an arbitrary decision 
whether that will be a @property or not. Reasonable people could ask me 
why I chose whichever way I chose. (Most recent example: save() for 
forward ranges.) Arbitrary decisions are bad.

@property is badly designed, no two ways about it. I now regret I didn't 
lobby more against it. I have a similar regret about lazy.


Andrei


More information about the phobos mailing list