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

Steven Schveighoffer schveiguy at yahoo.com
Thu Mar 15 10:39:19 PDT 2012


On Thu, 15 Mar 2012 13:24:24 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> On 3/15/12 12:12 PM, Steven Schveighoffer wrote:
>> On Thu, 15 Mar 2012 12:05:46 -0400, Andrei Alexandrescu
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>
>>> On 3/15/12 11:02 AM, Don Clugston 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.
>>>> One possibility might be to accept a pair of array literals,
>>>> representing keys and values.
>>>> Possibly it should call a CTFE function to convert them into some  
>>>> other
>>>> form?
>>>
>>> Offhand, I think this rewrite should be sufficient:
>>>
>>> [e11:e12, e21:e22]
>>>
>>> --->
>>>
>>> .object.associativeArrayLiteral(e11, e12, e21, e22)
>>>
>>> Then type manipulation and template constraints can take care of the
>>> rest. Am I missing something?
>>
>> Wouldn't this require a new template instantiation for each sized AA per
>> key/value type? Or were you planning to use varargs?
>
> Template function takes over, does whatever is necessary, such as  
> possibly conversion to varargs.

Right, but with a template:

[1:1]
[1:1, 2:2]

become two separate template instantiations, but with something that just  
takes two arrays, it's only one template, no matter how many elements you  
are initializing with.

>> So long as the data that is actually passed to the AA is on the stack
>> (and simply a slice is passed), I like Don's idea better.
>
> What would that look like?

auto aa = [1:1];

  becomes:

int[1] __k = [1]; // obviously, no heap allocation should happen here,  
that needs fixing in the compiler
int[1] __v = [1];
auto aa = AssociativeArray!(int, int)(__k, __v); // same instantiation, no  
matter how many elements are in literal.

-Steve


More information about the Digitalmars-d mailing list