25-Oct-2013 23:26, Namespace пишет:
On Friday, 25 October 2013 at 19:03:14 UTC, Dmitry Olshansky wrote:

O.T. I'd gladly kill built-in AA though just to save people a lot of
time spent on debugging that crap. More precisely I'd keep AA
_literals_ and give the user the means to construct any type of
Key-->Value store out of it. It's too late probably.

With which syntax? As far as e.g. int[string] (and not something ugly as
Map!(string, int)) would stay what would be the problem to change the
backend?

Map!(string,int) is fine actually as I'm no syntax fan anyway.

It's not the problem with "backend" as much as with its state and the interface it imposes:

a) It's stuck in between compiler intrinsic and library artifact. Being neither it has weaknesses of both (well that's fixable). b) Interface... I don't even know where to start. But first of all: it's a hash table and can't be anything else - see the rehash function. More interestingly it escapes pointers ('in' operator) that must stay valid until another insert. That's a tough constraint on hash table (HT) implementation. Being HT it doesn't expose nor allows to change the load-factor. c) Built-in HTs are one size fits all. Needless to say - it doesn't always fit and in particular there are many variations that trade insert/remove and/or space-efficiency for faster lookup and vise-versa. Also to stay on topic - memory management / deterministic cleanup? Trivial in UDT but not in built-ins. d) AA literals are of no use the moment one stops using built-in HTs least one constructs temporary built-in HTs on GC heap. In my opinion if that's left as is the AA literal feature doesn't quite pull its weight.

All in all built-in AA are aging badly since D1 days.

--
Dmitry Olshansky

Reply via email to