Sig,

No argument here.  In fact, I'll raise you :)  Weak collections in general, not 
just the finalizer registry, need to repair themselves in a thread-safe manner.

   
http://thread.gmane.org/gmane.comp.lang.smalltalk.pharo.devel/15001/focus=15172
   http://article.gmane.org/gmane.comp.lang.smalltalk.sapphire.devel/14732

* Weak collections are of reduced value if they hang onto empty slots.
* Enter a high-priority thread to strip away such junk; the weaklings must now 
be threadsafe.
* You and others come along wanting to do things like #at:ifAbsentPut: 
(ensuring one-off registration, etc.) and suddenly find that you are doing this 
via a thread-safe collection that can get this stuff right.

Bill


________________________________________
From: [email protected] 
[[email protected]] On Behalf Of Igor Stasenko 
[[email protected]]
Sent: Thursday, September 23, 2010 4:23 PM
To: The general-purpose Squeak developers list; Pharo Development; Levente 
Uzonyi
Subject: [Pharo-project] Multiple finalizers per single object

Hello,

i'd like to raise this subject once more, because i don't like it (or
don't understand?).

In all scenarios, where i met the need to use finalization, a single
finalizer is sufficient.
Moreover, there is always a single object who controls a weak
reference, and it never leaks it out, to prevent
the case, when some other object may obtain a strong reference on it,
making it permanently held in object memory.

Multiple different finalizers for single object, from design point of
view, means that you having two different, not related frameworks,
which using same object, and want to do something when it dies.
A scenario, where its possible and userful, still don't comes into my mind.
In contrary, whenever i see a use of finalizers, its in most cases
about graceful control over external resource, such as:
- file
- socket
- external memory

and i really don't see how multiple finalizers per single resource
could do any good.

Suppose one finalizer closing a file handle, while another one
flushing it buffer cache.
Now, how you going to ensure, that one finalizer will execute first,
before another one?
And what if third framework comes into play and wants to add another
finalizer on top of that, which should do something in the middle
between flushing a cache and closing file handle?

>From the above, the only conclusion can be made: use a single
finalizer, and put all logic & operation ordering into it.
And also, prevent leakage of object pointer (such as file handle)
outside of your model, otherwise it may cause harm.

That's why i think a current WeakRegistry model provoking bad design practices.
I think a better behavior would be to raise an error, if something
wants to register finalizer twice for a single object.


--
Best regards,
Igor Stasenko AKA sig.

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to