Revised RFC on range design for D2

Steven Schveighoffer schveiguy at yahoo.com
Fri Sep 26 10:47:55 PDT 2008


"Andrei Alexandrescu" wrote
> Steven Schveighoffer wrote:
>> "Andrei Alexandrescu" wrote
>>>> P.S. If src.next() is too lengthy, why not just adopt ++src?
>>> Because people (in wake of the recently introduced array operations) may 
>>> legitimately expect that to mean "increment all elements of src".
>>
>> So in one case, you believe people's assumptions aren't important, i.e. 
>> an assumption that .next without parens will not change anything on the 
>> object, yet in another case you believe people's assumptions are the main 
>> argument. This doesn't sound consistent.
>
> Of course it is. One expectation has to do with operational consistency 
> (albeit a tad far-fetched), the other has to do with being used to a 
> mistaken decision in the C language design.

You are assuming that the C language decision to require parentheses for all 
functions was a design mistake.  I would argue that the design was on 
purpose and correctly served that purpose.  The purpose was to remove 
ambiguity when faced with understanding code without all the context.

But that isn't even the questioned practice here.  C designers didn't even 
come across the question of whether an accessor-property should imply no 
changes to the object, because they don't have properties.  The real problem 
is that no matter how you define next(), you can use it in a way which makes 
it appear like an accessor, not a function which modifies the object.  The 
source of the problem is D's lack of expressiveness, where I cannot define 
whether a function cannot be used as a property.

Even with a true property definition syntax, you cannot prevent someone from 
changing an object while inside an accessor, that should be defined by the 
constancy of the object in question.  But indicating that it is preferred to 
use the property-style means to access the next() member function seems to 
be misleading to some people.

The problem I have with your argument is how you used one case to say 'this 
is misleading to people, so it's not a valid solution', and in another case 
say 'it's only misleading because you are used to it, that doesn't matter.' 
The assumption of which people are important to please is the issue.  I 
understand you can't please everyone, but you shouldn't use the 'people 
won't like it' argument without real evidence or proof.

>> Not that I care too much :)  I am also in the camp of 'defined properties 
>> should be a language feature,' but I admit to using D-properties quite 
>> often.
>>
>> The two things that bug me the most about D property syntax:
>>
>> stuff like this:
>>
>> x;
>>
>> What the hell does this mean?  It looks like it does nothing.  But it 
>> could be a function call.  If explicit properties were required, and x 
>> was defined as a function, not a property, then x; would be a syntax 
>> error.
>
> And what would be the advantage? I routinely use writeln; without feeling 
> it makes for inferior style.

The advantage is not to you, it is to the reader of your code.  writeln; is 
a complete misuse of property syntax, and IMO should not be allowed. 
writeln is not a property, and shouldn't be used like a property.  I 
routinely use Tango's Stdout.newline; which I admit goes against what I am 
saying, but it's because I know what Stdout.newline does, and that it is a 
function.  I would gladly change everything to Stdout.newline() if it was 
required.

The problem is not that you or anyone might forget that writeln is a 
function and not a property, the problem is when you start using the 
property syntax to call functions that aren't so standard, someone reading 
the code will be confused as to what the code is supposed to do.

The advantage is, you are able to define how a symbol behaves, what the 
rules are for using it.  It makes for clearer code.

-Steve 




More information about the Digitalmars-d-announce mailing list