thanks for the explanation... it is a nice form of the drawings we have on our 
boards.
Igor implemented them since he could not resist.

Stef

On May 24, 2011, at 5:28 AM, Eliot Miranda wrote:

> 
> 
> On Mon, May 23, 2011 at 5:47 PM, Alexandre Bergel <[email protected]> 
> wrote:
> What is Ephemerons?
> 
> Smart associations that can be used to implement per-object finalization.  An 
> ephemeron holds onto some object via its key field in a quasi-weak manner 
> such that the garbage collector will only consider the key live if it can be 
> reached from the roots and not reachable by the ephemeron's other inst vars.  
> If the only references to objects referred to by ephemeron keys are through 
> the other fields of ephemerons with otherwise unreachable keys then the these 
> objects are collectable.  The garbage collector works in two phases.  First 
> it traces all objects from the roots, topping the trace at any ephemeron 
> whose key is unreachable.  The second phase then loops until a fixed point is 
> reached; all ephemerons with unreachable keys are added to the finalization 
> queue and the objects reachable from the key and the ephemeron's other fields 
> are traced.  Any ephemerons with unreached keys are added to the finalization 
> queue.  This phase continues until no more ephemerons are found.  Then, if 
> the finalization queue is non-empty, the GC signals the rest of the system 
> that there are finalizable ephemerons.  The image then takes over, drain ing 
> the ephemerons in the queue and sending e.g. mourn to each ephemeron which 
> can then send finalize to its key and remove itself from any dictionaries in 
> which it exists, allowing it and its key to be garbage-collected after 
> finalization.
> 
> What's the rationale?  Often one wants to associate state with finalizable 
> objects, such that that state refers back to the finalizable obejcts.  The 
> classic examples are views in MVC.  RThe views are dependents of some model 
> and we may want want the model to be finalized when no object (including 
> dependents) refer to the model.  But we don't want references from the 
> dependents to keep the object alive.  But if the dependents are stored in 
> some global dictionary from model to sequence of dependents then the 
> reference from the global dictionary keeps both the model and the dependents 
> alive.  If we replace the association with a weak key association then the 
> references from the dependents back to the model keep the model alive.  But 
> with ephemerons there is an implicit switch, implemented by the GC, that 
> causes the system to exclude references from the transitive closure of the 
> dependents unless the model is reachable from the roots, excluding references 
> from ephemeron keys.
> 
> So ephemerons provide a mechanism for providing per-instance finalization and 
> property lists (dependents being a special case of property list).  They 
> allow the system to detect when an object is reachable from the roots, 
> excluding an arbitrary set of references (reachable from an ephemeron's other 
> fields) which do not count towards an object being considered live.  They 
> allow for finalization to be managed by the system, above the VM, while the 
> VM's job is just to determine reachability and liveness.
> 
> make sense?  clear as mud?
> 
> best,
> Eliot
> 
> 
> Alexandre
> 
> 
> 
> Le 23 mai 2011 à 20:43, Igor Stasenko <[email protected]> a écrit :
> 
> > I felt a bit hacky today and decided to implement Ephemerons.
> >
> > I tried to run it on both StackVM and Cog VMs,
> > it seems to work fine (at least all 4 tests, which my brain were
> > capable to produce,  are green. ;)
> >
> >
> > You can find the VM code on SqS/VMMaker in package:
> >  VMMaker-oscog-IgorStasenko.67
> >
> > Also, i created a separate issue on Cog issue tracker to track it.
> > http://code.google.com/p/cog/issues/detail?id=44
> >
> > The implementation may contain a bugs. So, it needs review and testing.
> > Now i would like all interested parties to give a feedback and help
> > integrating it into our production images.
> >
> > --
> > Best regards,
> > Igor Stasenko AKA sig.
> >
> 
> 


Reply via email to