Decision on container design

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri Jan 28 14:09:08 PST 2011


On 1/28/11 3:05 PM, Michel Fortin wrote:
> On 2011-01-28 13:31:58 -0500, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> said:
>
>> Today after work I plan to start making one pass through
>> std.container. After having thought of things for a long time, my
>> conclusions are as follows:
>>
>> 1. Containers will be classes.
>>
>> 2. Most of the methods in existing containers will be final. It's up
>> to the container to make a method final or not.
>>
>> 3. Containers and their ranges decide whether they give away
>> references to their objects. Sealing is a great idea but it makes
>> everybody's life too complicated. I'll defer sealing to future
>> improvements in the language and/or the reflection subsystem.
>>
>> 4. Containers will assume that objects are cheap to copy so they won't
>> worry about moving primitives.
>>
>> Any showstoppers, please share.
>
> Not my preferred choices (especially #1), but having containers in
> Phobos will certainly be an improvement over not having them. So go ahead!

Well if you brought forth some strong argument I'm all ears. What I see 
for now is that struct containers are just difficult to implement and 
need to have carefully explained semantics, whereas a lot of people know 
how classes behave from day one.

> About #4, it'd be nice to have the containers use move semantics when
> possible even if they fallback to (cheap) copy semantic when move isn't
> available. That way, if you have a type which is moveable but not
> copyable you can still put it in a container. Does that makes sense?

That's what I did up until now. It is tantamount to defining a bunch of 
methods (aliases or not) that add to the interface that the user must 
absorb, but that are seldom useful. It just seems that the entire move 
paraphernalia doesn't lift its weight.


Andrei



More information about the Digitalmars-d mailing list