Revised RFC on range design for D2

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Oct 1 06:28:36 PDT 2008


Simen Kjaeraas wrote:
> On Wed, 01 Oct 2008 07:58:20 +0200, Benji Smith 
> <dlanguage at benjismith.net> wrote:
> 
>> Bill Baxter wrote:
>>> On Tue, Sep 30, 2008 at 3:36 AM, Steven Schveighoffer
>>> <schveiguy at yahoo.com> wrote:
>>>>> There is no ambiguity either case. You evaluate Stdout.newline. The
>>>>> evaluation yields a value of some type. Then you evaluate formatln 
>>>>> against
>>>>> that value.
>>>> OK, then tell me what this does:
>>>>
>>>> x.y.z();
>>>>
>>>> Is y a property/field of x or a function call with no args?  I see a 
>>>> benefit
>>>> to being able to understand a line of code without requiring lots of 
>>>> extra
>>>> context.  I have to do less lookups of the source of a function or 
>>>> property.
>>>  The problem with this argument is that unless you disallow properties
>>> altogether, you still won't know whether y is actually a field or a
>>> call to a property method without looking it up.
>>>  --bb
>>
>> One thing that I've found especially annoying about the current 
>> implementation is this:
>>
>>    x.y = 3; // Working code
>>    x.y += 3; // Broken, if x.y is actually a function
>>    x.y = x.y + 3; // Ugly work-around
>>
>> I've been bitten by this at least a dozen different times. Having a 
>> real property syntax would eliminate cases like that.
>>
>> --benji
> 
> It seems we will soon get reference return values, in which case this would
> no longer be a problem. I have also written a property template that 
> enables
> things such as that, but it would also benefit immensely from reference
> return values.

Not quite. Sorry, I woke up all negative this morning :o).

Consider the .length property for built-in arrays. Better yet, consider 
you implement your own array and want to define a .length property.

You don't want it to return a reference! You want to have control over 
the assignment so that you execute the actual array change.

What I'd proposed to Walter for a long time is to allow a.b @= c to work 
if a.b = a.b @ c works. I'm sure people around here will find reasons to 
dislike that :o).


Andrei


More information about the Digitalmars-d-announce mailing list