On Monday, February 13, 2012 20:41:01 Zachary Lund wrote: > On 02/11/2012 07:00 PM, Jonathan M Davis wrote: > > On Sunday, February 12, 2012 01:40:50 Zachary Lund wrote: > >> Btw, I'm not very fluent in the inner workings of a garbage > >> collector implementation but how does one go about concatenating > >> to an array in a garbage collector as compared to manual memory > >> management? I believe array concatenation can be done in > >> std::vector with the insert() function just fine. Isn't it as > >> simple as determining both array sizes and allocating enough > >> memory for both arrays? I could be oversimplifying things... > > > > Read this: > > > > http://www.dsource.org/projects/dcollections/wiki/ArrayArticle > > > > Appending to vectors is very different from appending to dynamic arrays > > because dynamic arrays do _not_ own their own memory (the GC does) and > > not only could other slices refer the same memory (in which case, you > > can't just free that memory when an array gets reallocated due to running > > out of space to append to), but they could already refer to the memory > > one past the end of the array, making it so that it can't expand into > > that memory. > > > > Slices change the entire equation. And the way slices are designed, they > > require the GC. > > > > - Jonathan M Davis > > Right but they use the same semantics and the information to do either > seems to be present. I'm not sure why an abstraction between the two > cannot be made.
I'm not sure what you're saying. All dynamic arrays are slices and _none_ of them own their own memory. As such, you need a way to manage their memory. Vectors, on the other hand, own their memory and do not allow slicing at all. - Jonathan M Davis