GC object finalization not guaranteed

Walter Bright newshound1 at digitalmars.com
Sat Apr 18 17:38:04 PDT 2009


Leandro Lucarella wrote:
> You missed the point. I'm not talking about freeing the memory. I'm
> talking about finalizers. A finalizer could send a "bye" packet throgh the
> net. That can't be handled by the OS.

That shouldn't be handled by a finalizer. A "bye" packet can be handled 
by a static destructor.

> And I'm not talking about doing a collection at program exit either. I'm
> talking about just calling the finalizers.

The finalizers are found by doing a collection scan to see what's left, 
and then running the finalizers.


> What I say is to do this (in some kind of pseudocode, which is actually
> valid code in my example naive GC implementation =):
> 
> void gc_term()
> {
> 	foreach (cell; this.live_list)
> 		rt_finalize(cell.ptr);
> }
> 
> No collection, no free.
> 
> What do you think about that? And about finalizers being completely
> useless if the excecution is not guarateed? I would really like to know
> (Sean's opinion would be appreciated too, being in charge of druntime).

Finalizers are fairly useless for gc. But they are a lot more useful as 
RAII destructors.

> Maybe this can be an improvement for D2 (I don't think you'll like to
> change the specs for D1 =).
> 



More information about the Digitalmars-d mailing list