Revamping associative arrays

grauzone none at example.net
Sat Oct 17 13:47:21 PDT 2009


Max Samukha wrote:
> On Sat, 17 Oct 2009 13:28:51 -0500, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> wrote:
> 
>> Associative arrays are today quite problematic because they don't offer 
>> any true iteration. Furthermore, the .keys and .values properties create 
>> new arrays, which is wasteful.
>>
>> Another issue with associative arrays is that ++a[k] is hacked, which 
>> reflects a grave language limitation. That needs to be replaced with a 
>> true facility.
>>
>> Any other issues with AAs that you want to see fixed, and ideas guiding 
>> a redesign?
>>
>>
>> Thanks,
>>
>> Andrei
> 
> They should be true reference types. Now we have oddities like this: 
> 
> int[int] a;
> auto b = a;
> a[1] =  2;
> assert(b[1] == 2); // Range violation
> 
> int[int] a;
> a[1] =  2;
> auto b = a;
> a[2] = 3;
> assert(b[2] == 3); // Ok

That's because the actual AA is allocated on demand (when you add the 
first element). The new array type T[new] is going to have the same 
"problem".

I like it, because if you don't need it, it doesn't allocate memory. Of 
course it's possible that the complication in semantics isn't it worth. 
But D is still a systems programming language with a *very* bad GC, 
which is why I think it should continue to work this way.



More information about the Digitalmars-d mailing list