Zachary Lund admin at computerquip.com
Sat Feb 11 14:20:06 PST 2012

On Saturday, 11 February 2012 at 19:21:49 UTC, Piotr Szturmaj 
> Jonathan M Davis wrote:
>> On Saturday, February 11, 2012 19:00:51 q66 wrote:
>>> What's so difficult on that? Slices do not require the GC, you
>>> allocate once, slice many times, deallocate once.
>> With dynamic arrays, the GC owns the memory, and _all_ dynamic 
>> arrays are
>> slices. _None_ of them own their own memory. The GC keeps 
>> track of whether you
>> have any slices for a particular memory block and deals with 
>> freeing up wth
>> the block if you don't. However, if you allocate a dynamic 
>> array without the
>> GC, then all of a sudden, it effectively owns its own memory, 
>> so the semantics
>> of dealing with arrays and memories changes drastically. What 
>> happens when you
>> slice it? Which one owns the memory? What happens when you try 
>> and do stuff
>> like popFront on an array? All of a sudden, you have memory 
>> which is no longer
>> referenced. It's been leaked.
>> If you have a very careful scheme for handling memory, you 
>> _can_ slice arrays
>> without a GC, but you have to worry about all the bookkeeping 
>> of keeping track
>> of the originally allocated memory and how many slices 
>> reference it so that
>> you can free it when appropriate.
>> Also, you can't concatenate to arrays at all, because that 
>> requires the GC.
>> So, you're dealing with a mine field if you try and use D's 
>> array capabilities
>> without a GC. Yes, you _can_ use some of them if you're _very_ 
>> careful, but
>> I'd seriously advise just sticking to using arrays like you 
>> would in C except
>> for the fact that arrays know their length.
> Delphi has dynamic arrays and appendable strings without a GC. 
> In Delphi pointers and objects are managed manually, but arrays 
> and strings are managed automatically (ref counted with 
> Copy-On-Write). Take a look at 
> http://www.codexterity.com/delphistrings.htm. Maybe some Delphi 
> solutions may be used in NoGcD?

It's possible that we just create our own dynamic array similar 
to that of std::vector from C++ except using cleaner syntax 
available in D. I'd really rather not do that though since it 
feels redundant.

More information about the Digitalmars-d mailing list