Standalone AA implementation ready for review (Was: Re: Replacing AA's in druntime)

H. S. Teoh hsteoh at quickfur.ath.cx
Thu Mar 15 10:22:06 PDT 2012


On Thu, Mar 15, 2012 at 05:02:06PM +0100, Don Clugston wrote:
> On 15/03/12 00:16, H. S. Teoh wrote:
[...]
> This is good, and very, very important. Do *not* make any attempt at
> compiler integration until it is *completely* ready.
> 
> This includes AA literals. They need to be accepted somehow. The
> compiler will give you syntax sugar and *nothing* more.

How does the compiler currently work with AA literals? I see two
functions in aaA.d for constructing AA's from literals. Which one is the
one actually being used?


> One possibility might be to accept a pair of array literals,
> representing keys and values.

OK. This shouldn't be hard to do. I'll take a stab at it.


> Possibly it should call a CTFE function to convert them into some
> other form?

This is one major area that I forgot to mention, and that is, making AA
literals work at compile-time. Currently things like this don't work:

	enum myAA = ["abc":123, "def":456];

I'd like to make that work. That would require compile-time construction
of the AA and storing it in some form that the compiler can put into the
object file. I'm thinking of something along the lines of using mixins
to generate explicit instances of Slot structs, so the above would
translate to something like:

	Impl __myAA_literal_impl = Impl(__myAA_literal_slots[0..$], 2);
	Slot[4] __myAA_literal_slots = [
		// The exact order in here will depend on precise hash
		// values, which will need to be somehow computed by
		// CTFE. Is that even remotely possible right now??
		null,
		&__myAA_literal_slot1,
		null,
		&__myAA_literal_slot2
	];
	Slot __myAA_literal_slot1 = Slot(null, /*hash value*/, "abc", 123);
	Slot __myAA_literal_slot2 = Slot(null, /*hash value*/, "def", 456);
	enum myAA = AssociativeArray!(string,int)(&__myAA_literal_impl);

Would something like this be workable? Is it even possible to compute
the necessary hashes at compile-time?


T

-- 
Never step over a puddle, always step around it. Chances are that whatever made it is still dripping.


More information about the Digitalmars-d mailing list