Kinds of containers

jmh530 via Digitalmars-d digitalmars-d at puremagic.com
Wed Oct 21 13:13:28 PDT 2015


On Wednesday, 21 October 2015 at 18:38:10 UTC, Jonathan M Davis 
wrote:
>
> A static array is of a fixed size, which almost no other 
> containers are. It also lives entirely on the stack, which 
> almost no other containers do. If there's a container that 
> lives entirely on the stack, then maybe it would make sense for 
> it to be a value type, but _very_ few containers fall in that 
> category, and all of the classic containers like vector, linked 
> list, map, etc. have no business being value types IMHO. It's 
> just error-prone. Heck, static arrays are quite error-prone 
> thanks to the fact that they convert to dynamic arrays, but 
> they do serve a purpose. So, maybe there are containers that 
> fall in the same category, but I expect that such containers 
> are pretty obviously value types and not reference types, 
> because their nature makes them that way. Regardless, I don't 
> see how it's reasonable in general to make a container be a 
> value type. It's just asking for trouble. If there's any 
> question at all whether a container should be a value type or a 
> reference type, IMHO, it should be a reference type.
>

I do find myself mixing up static and dynamic arrays...

I'll generally defer to you. I suppose within the context of 
Andrei working on containers with std.allocator, then containers 
that only live on the stack seems beyond the scope anyway.

Your statement just had struck me as weird as I had thought of 
people like manu saying at various points that they only kept 
data structures on the stack. My next thought was that static 
arrays are usually on the stack and are value types. So I figured 
that whatever the performance people are using were similar.


More information about the Digitalmars-d mailing list