std.container update

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu May 27 19:41:20 PDT 2010


On 05/27/2010 08:42 PM, Leandro Lucarella wrote:
> Andrei Alexandrescu, el 27 de mayo a las 20:06 me escribiste:
>> On 05/27/2010 06:28 PM, Jonathan M Davis wrote:
>>> I take it that Array is basically supposed to be std.container's version of
>>> C++'s vector or Java's ArrayList? If so, I would suggest that Array is not
>>> the best of names in that it would become very easy to confuse it with
>>> built-in arrays when discussing them (particularly in verbal communication
>>> where you can't see the capital A). Personally, I would have just gone with
>>> Vector, since it's a fairly standard name for that sort of container and
>>> wouldn't be confused with anything else. If you really want Array, that's
>>> fine - it should be clear enough when it's in code - but I would think that
>>> talking about it could easily be confusing enough that it wouldn't be the
>>> best of names.
>>>
>>> - Jonathan M Davis
>>
>> Good point. Other opinions?
>
> I always thought vector was a bad name choice in C++, I had that word
> associated with what C++ calls a valarray (a physics vector).
>
> I agree that Array is too generic for D, though, and unfortunately I don't
> have a better suggestion, but you asked for other opinions ;)
>
> BTW, what would be the point of an array/vector when you have built-in
> arrays? If built-in arrays would be syntax sugar for a real library type,
> like AAs, I can see as a good option using Array for that type, since
> built-in arrays and the library Array would be the same thing.

This is a good question. The relationship between Array and T[] is simple:

* Array is a compliant container so it is a reference type

* T[] is Array's range

With built-in associative arrays the question becomes even more 
interesting because the associative array _is_ already a reference type. 
So Walter and I agreed to make built-in associative arrays just 
compliant std.container objects, with three differences:

* AssocArray lives in object.di for various reasons

* The compiler translates the type name V[K] as AssocArray!(K, V)

* The compiler translates associative array literals into associative 
array objects

Other than that... an associative array will be just one of the growing 
offering of collections in std.container. And I think that's the way it 
should be.


Andrei



More information about the Digitalmars-d mailing list