Error: xxx is not an lvalue
Unknown W. Brackets
unknown at simplemachines.org
Mon May 4 13:28:06 PDT 2009
If that's the structure, then yes, I agree.
Long time ago (before D 1.x?) I looked at the associative array
implementation and it was a struct with a few members. I didn't realize
it had changed. Or maybe I'm just remembering wrong.
-[Unknown]
Steven Schveighoffer wrote:
> On Mon, 04 May 2009 14:53:41 -0400, Unknown W. Brackets
> <unknown at simplemachines.org> wrote:
>
>> I've always though of arrays and associative arrays as structs (which
>> really is what they are.) Thinking that way, this behavior makes
>> exact sense - down to .length being unchangeable and associative
>> arrays being unchangeable.
>>
>> I mean, you wouldn't want to make it work the way you suggest by
>> making arrays and associative arrays simply pointers to their current
>> structs (just like a class would be.) You could make such a class
>> easily yourself, anyway.
>>
>> If you are right, I guess the right solution would be to make the ref
>> implicit when returning (or, I suppose, passing?) such arrays and
>> associative arrays. But that seems wrong to me too, and wouldn't come
>> free (speaking of efficiency) either.
>>
>> -[Unknown]
>>
>
> The underlying struct of an AA is:
>
> struct AA
> {
> AA_Implementation *impl;
> }
>
> or something like that ;) Look at the D runtime source.
>
> But in any case, if you return an array slice, would you not want to be
> able to update an element of the slice?
>
> I think there is a difference between a value struct (where all
> internals are non-reference types), and a reference struct (where at
> least one element is a reference type). A reference struct should be
> able to pass those references to other functions without having to be
> ref'd. It forces non-transparent type wrapping if that isn't the case.
> I should be able to replace a reference or pointer type with a wrapper
> struct where I can modify the interface, and it should be transparent
> that I have done so (except for the interface changes of course). I
> think this is one of the goals D2 is working towards.
>
> It makes sense that a value struct or the value types inside a reference
> struct (i.e. the length of an array) should not be changeable as
> rvalues, since you aren't going to use them later.
>
> Both arrays (as the current implementation) and AA's are reference structs.
>
> -Steve
More information about the Digitalmars-d
mailing list