On Sunday, April 08, 2012 01:24:02 Caligo wrote: > On Sat, Apr 7, 2012 at 11:01 PM, Jonathan M Davis <[email protected]> wrote: > > What do you mean my static associative arrays? Are you asking why you > > can't > > initialize a static variable which is an AA at compile time? e.g. > > > > - Jonathan M Davis > > The same way I can create a static array: > > int[4] = [1, 3, 4, 8]; // has value semantics > > and dynamic arrays: > > int[] = [1, 4, 2, 4]; // has reference semantics > > I want an associative array that has value semantics and it's size > doesn't change, just like static arrays.
Associative arrays are always on the heap. They always have reference semantics. It would be very expensive to have an AA with value semantics. They contains pointers all over the place. It would be equivalent to calling dup on them every time that you pass them to anything. And trying to put one on the stack would get very messy because all of the pointers involved. AAs are _completely_ different from dynamic and static arrays. Aside from the fact that they both have array in their name and both allow indexing of a sort, there's really no relation between them at all. > P.S. > another point. I was always under the impression that static arrays > are allocated on the stack whereas dynamic arrays are allocated on the > heap and the GC cleans them up. After today, I'm not so sure if this > is true. Are static arrays allocated on the stack? if so, that would > be another reason to want to have static associative arrays. Yes. static arrays go on the stack and are value types, whereas dynamic arrays go no the heap and are reference types which are managed by the GC. If you want more details on how arrays work, read this: http://dlang.org/d-array-article.html - Jonathan M davis
