On Wednesday, November 07, 2012 10:45:46 monarch_dodra wrote: > Also, Array uses a deterministic memory model, just like vector, > that releases content as soon as it goes out of scope. I could > have done without that, personally, but to each their own.
Yes. The built-in arrays work extremely well as they are designed, but they are _not_ meant for cases where you need the array to have specific ownership. It appears that Array is using malloc and free internally (including telling the GC about it so that it's scanned for references/pointers as appropriate), so it doesn't even have to worry about stuff like assumeSafeAppend. It's very much in line with std::vector and what should be used if you want something similar to std::vector. By the way, monarch_dodra, since you've been messing around with Array recently, I would point out that it looks like setting the length doesn't work properly if you set it greater than the current length, let alone greater than the current capacity. _capacity is not adjusted if newLength is greater than it, and no calls to GC.removeRange or GC.addRange are made, so it doesn't look like newly allocated memory is being tracked by the GC like it should if length is allocating it. And I find the whole length vs capacity bit in Array highly confusing, because it looks like the length of the payload is used for length, when I would have expected the length of the payload to be the capacity and for there to be a separate length for the actual number of elements. So, I really don't know what's going on with std.array.Array's implementation without studying it a lot more - hopefully you do. But at minimimu, I'd advise verifying that the GC.addRange and GC.removeRange calls are being correctly done, because regardless of what the deal is with capacity vs length, it seems seriously off to me that no GC functions are called when a realloc is made. - Jonathan M Davis
