Finalizers, Destructors, RAII, GC

Ola Fosheim Grøstad ola.fosheim.grostad at gmail.com
Wed Apr 28 22:39:45 UTC 2021


On Wednesday, 28 April 2021 at 22:05:31 UTC, sighoya wrote:
> Doesn't suffice ownership here? I mean you surely talk about 
> owned manually allocated memory inside a class.

The compiler currently doesn't know about ownership, but you 
might have a non-owning pointer to a resource-manager-object that 
is guaranteed to outlive the program for instance.

> But why the need at all for a finalizer and instead allow 
> non-empty destructors for gc allocated classes?
> Having both is confusing.

Because destructors should be reserved for deterministic 
destruction, where you can presume that there are no dangling 
pointers. You shouldn't be allowed to allocate such object on the 
GC-heap.

On the other hand, you should be allowed to subclass a 
GC-oriented finalizer based class and extend it with 
deterministic destruction.  I guess you could make the 
distinction some other way. The difference is that a finalizer is 
running on a partially destructed object, whereas a destructor is 
running on a valid object.

You don't need seperate functions at runtime, I guess, but the 
compiler has to know whether it is typechecking a finalizer or a 
destructor.

>> Or would it be better to simply forbid any cleanup in the GC? 
>> I kinda think so, but I also think many D users are used to 
>> letting the GC trigger cleanup on collection.
>>
>> What do you think?
>
> Probably not for gc managed resources, but what about making 
> class members reference counted or owned instead.

That is the big question, is it really necessary to allow the GC 
to manage other resources than memory?

I guess you could do it also for file descriptors, with a precise 
collector. Then it would scan also file descriptors and release 
those that no longer are referenced. But that is kinda 
esoteric... :-)

> Owned resources should be deleted automatically when a class 
> object is destructed and reference counted resources are 
> deleted if refcount goes to zero, which may occurs after 
> destruction but at least not before.

Yes, but this is tricky with a GC that isn't fully precise. The 
more objects that reference the ref-count the more likely you are 
to get a leak.




More information about the Digitalmars-d mailing list