Fun project - faster associative array algorithm

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Thu Apr 9 04:57:22 PDT 2015


On 4/8/15 5:11 AM, Martin Nowak wrote:
> On Tuesday, 7 April 2015 at 22:33:52 UTC, Steven Schveighoffer wrote:
>> Until that point, all these discussions on AA updates are useless.

>
> I really don't that all or nothing attitude, it condemns an important
> step, just because something better might be possible. It's also very
> comfortable, because this way nobody will ever have to do anything.

I'm not suggesting nobody ever do anything out of comfort. What I'm 
suggesting is that it's not worth improving something that will be 
discarded anyway. Let's fix the problem hampering people from 
understanding how the AA works so they can work on improving the AA. 
Namely, the discarding of all compile-time info during implementation.

> Improving the AA implementation has a big immediate effect, and will
> also help anyone writing a library implementation, because any candidate
> up to this date was still based on that crappy bucket list implementation.

The "crappy bucket list" implementation is also the simplest. When the 
focus should be on fixing the AA interface with the compiler and 
library, I think having a simple understandable implementation is fine.

Let me remind you of your attitude when I brought up the fact that AA's 
load factor was 4 (just fixing this one number could improve 
performance, even for the bucket list implementation):

 > We'll throw the current implementation away and implement an open 
addressing AA once we get to it. So don't worry about the load factor 
right now.

In other words, don't bother fixing the constant "4" in the code, it's 
going to be thrown away anyways.

> The biggest problems in writing an AA library implementation sorted by
> difficulty are:
> - deprecation of all magic AA behaviors (attributes, as[i][j]++)
> - get the lowering right

I really am surprised that these would be difficult at all. The lowering 
is pretty easy:
a) T[U] => AssociativeArray!(U,T)
b) [a:b, c:d] => AssociativeArray!(typeof(true ? a : c), typeof(true ? b 
: d)).literal(a, b, c, d);

Basically, bikeshed the name "literal" is the difficult part.

And deprecating the magic AA behaviors, isn't this just removing a whole 
lot of code from the compiler? Once the lowering is working, I don't see 
how removing special cases would be difficult. The part where we may 
have issues I see is CTFE support. But I would defer to those who have 
already tried this exercise, perhaps they can share what broke their 
solutions.

-Steve


More information about the Digitalmars-d mailing list