[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sc-dev] an idea for finalization of C objects

On Dec 1, 2004, at 10:07 PM, ccos wrote:

i understand that you cannot have dtors on the sc lang side because of the possible resurrection of dead objects which would necessitate a second pass of the gc,

That is not the reason that there is no finalization. The reason is that SC objects are never explicitly freed. The garbage collector has no sweep phase, so it never visits freed objects. Adding a sweep phase would make the GC slower. If you are going to have finalization you have to have some way to identify which finalizable objects have been freed this cycle. Without a sweep of the free objects, you don't know.

there is of course the very slight runtime cost of checking if an object has a finalizer but i'm wondering if there are any other reasons why this would be a bad idea, or if it just wouldn't be possible because of something i don't know about the gc?

You'd never know when or what objects to call the finalizer on.
As an example, the SC GC is not a copying collector, but it works like one. In a copying collector reachable objects are copied from "old" space into "new" space. When you have copied all reachable objects, you can then reuse the "old" space. The objects in "old" space are implicitly free because you never reached them in your scan. You never touched the free objects so you never had a chance to finalize them. Adding finalization means adding a mechanism to identify the finalizable object that were left in "old" space. SC does not have this mechanism. SC3d5 did have such a mechanism, but it slowed down the GC.

--- james mccartney   james@xxxxxxxxxxxxxx   <http://www.audiosynth.com>
SuperCollider - a real time audio synthesis programming language