Manual memory management in D2

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Jul 13 11:36:02 PDT 2010


On 07/13/2010 01:12 PM, Vladimir Panteleev wrote:
> On Tue, 13 Jul 2010 18:30:26 +0300, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> wrote:
>
>> I agree deprecation shouldn't be taken lightly, but delete is not a
>> fundamental operator - it could and should be defined at most as a
>> simple function.
>
> delete is the antipod of new. With this logic, I don't see why new
> shouldn't be replaced with a function as well - after all, all it does
> is allocation and initialization, as opposed to delete's destruction and
> deallocation.

Not quite. New is different because it is a primitive - it can't be 
implemented as a function (well it could if it user placement new, but 
we're back to square one). In contrast, delete already knows the type of 
the object it's destroying and can call the destructor manually so it is 
easy to implement as a regular function.

Anyway, I'd be glad to provide a function that calls malloc() and then 
the emplace(), and also a function that calls the destructor and then 
free(). But manual deletion has no business in the garbage collected 
heap. That currently druntime provides it is an accident caused by the 
current implementation; most GC's cannot provide efficient manual 
reclamation. And they shouldn't anyway.

(There's a longer discussion underneath this concerning what memory 
really is and what GCs really are and do.)


Andrei


More information about the Digitalmars-d mailing list