D-

Nick Sabalausky a at a.a
Sat Feb 11 15:01:05 PST 2012


"Jonathan M Davis" <jmdavisProg at gmx.com> wrote in message 
news:mailman.242.1328986002.20196.digitalmars-d at puremagic.com...
> 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.

But not all slices are slices of dynamic arrays.

> _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.
>

Yea, manual memory management is hard and you have to be careful. That's 
true slices or not.

> Also, you can't concatenate to arrays at all, because that requires the 
> GC.
>

That's true (at least without providing some way to provide an alternate 
concatenation allocator). But nobody said that all D features would be 
usable.

> 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.
>

Arrays knowing their own length *is* a notable improvement over C.




More information about the Digitalmars-d mailing list