Eliminate class allocators and deallocators?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Oct 7 13:23:40 PDT 2009


Leandro Lucarella wrote:
> Andrei Alexandrescu, el  7 de octubre a las 14:16 me escribiste:
>> Sean Kelly wrote:
>>> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
>>>> dsimcha wrote:
>>>>> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
>>>>>> It is a bad idea because distinguishing between release of (expensive)
>>>>>> resources from dangerous memory recycling is the correct way to obtain
>>>>>> deterministic resource management within the confines of safety.
>>>>> This is based on two faulty assumptions:
>>>>>
>>>>> 1.  Memory is cheap.  (Not if you are working with absurd amounts of data).
>>>>> 2.  Garbage collection is never a major bottleneck.  (Sometimes it's a worthwhile
>>>>> tradeoff to add a few manual delete statements to code and sacrifice some safety
>>>>> for making the GC run less often.)
>>>> malloc.
>>> So for placement construction of a class, I guess it would look something like:
>>>
>>> auto x = cast(MyClass) malloc(MyClass.classinfo.init.length);
>>> x.__ctor( a, b, c ); // construct
>>> ...
>>> x.__dtor();
>>> free( cast(void*) x );
>>>
>>> Is that right?
>> Yes, I think so, but I haven't checked all the details. For example
>> I'm not sure whether __ctor copies .init over the memory before
>> running the user-defined constructor, or expects that to have been
>> done already.
>>
>> My understanding from Walter is that __ctor(x, y, z) are simply the
>> functions this(x, y, z) as written by the user, so you'd need to
>> memcpy the .init by hand before calling __ctor.
> 
> What I don't understand is why you're willing to make that hard to do
> manual memory management in D. Do you see that you're making the
> programmer's job deliberately for no reason? D needs conservative GC,
> which means slow GC; by definition. D is a system programming language, so
> it's expected to be fast, but because of the GC there will be often
> situations where you have to do manual MM. Why are you making that much
> harder?
> 
> You know that in the search for safety you'll be making much more unsafe
> (or bug-prone) to do manual MM?

You seem to be asserting that without additional built-in language 
support, manual memory management is unduly difficult. Why so?

Andrei



More information about the Digitalmars-d mailing list