[MLton] adding synchronous finalizers
Henry Cejtin
henry@sourcelight.com
Fri, 1 Oct 2004 22:21:17 -0500
Ok, I'm definitely confused now. Suppose a finalizer runs when we are not
synchronous, but sets the synchronous flag to true?
If it really is true that there are two finalizer lists, with ones from the
first being added to the second when the objects are ready to finalize and
when synchronous is false (or polling is being done), then I guess that this
isn't an issue, but it is semantically different in that a finalizer not
currently running will start to run later asynchronously.
As to the second point, my claim is that running finalizers might be very
expensive, but I don't mind because they are only run on explicit polls or
when a GC happens (in the non-synchronous case). Your code always runs
finalizers when I switch from non-synchronous to synchronous mode. Consider
the case of code that jumps between modes very often. I don't want that to
cause finalizers to run more frequently.
Given that you only discover that a finalizer should run when a GC happens,
maybe this doesn't really matter much, but I still don't see any reason to
force finalizers to run at that point.
I guess I'm still confused about how your code works.