[Newbies] terminate event?

Bert Freudenberg bert at freudenbergs.de
Mon Jan 22 16:10:57 UTC 2007


I'm sorry, but that's exactly what I wrote in the first example.

"Utilities finalize" does nothing as far as I can tell. It executes  
the "Object>>finalize" method which is a no-op. Remove that line and  
it will also print to the Transcript immediately.

- Bert -

Am Jan 22, 2007 um 15:38  schrieb abdu chadili:

> Or
>
> x := Object new.
> x toFinalizeSend: #show: to: Transcript with: 'He''s dead, Jim!\'   
> withCRs.
> Utilities finalize.
> x:=nil.
>
> will display the message to the transcript immediately.
>
> ----- Original Message ----
> From: David Urquhart <david.urquhart at hotmail.com>
> To: beginners at lists.squeakfoundation.org
> Sent: Sunday, January 21, 2007 9:42:16 PM
> Subject: Re: [Newbies] terminate event?
>
>
> Thanks for a fantastic answer and sample code.
>
> -Dave
>
>
> >From: Bert Freudenberg <bert at freudenbergs.de>
> >Reply-To: "A friendly place to get answers to even the most basic
> >questionsabout Squeak." <beginners at lists.squeakfoundation.org>
> >To: "A friendly place to get answers to even the most basic questions
> >aboutSqueak." <beginners at lists.squeakfoundation.org>
> >Subject: Re: [Newbies] terminate event?
> >Date: Sun, 21 Jan 2007 15:48:08 +0100 (MET)
> >
> >
> >Am Jan 21, 2007 um 15:21  schrieb Bert Freudenberg:
> >
> >>Am Jan 21, 2007 um 14:07  schrieb David Urquhart:
> >>
> >>>Hi
> >>>
> >>>I'm a Squeak beginner.  I want to write to the transcript when  
> an  object
> >>>is coming to life and when its terminating.  I have an   
> initialize method
> >>>for the birth - what is the method called that  fires at death?
> >>
> >>There is no such method. A message can be send to an object only  
> if  there
> >>is a reference to it. As long as a reference to an object   
> exists, it is
> >>not dead, it does only get garbage-collected when the  last  
> reference is
> >>removed.
> >>
> >>About the only thing you can do is to register a *different*  
> object  to be
> >>notified when one object is garbage-collected. This is called
> >>"finalization".
> >
> >Here's an example. Evaluate this in a workspace:
> >
> >    x := Object new.
> >    x toFinalizeSend: #show: to: Transcript with: 'He''s dead, Jim! 
> \'  withCRs
> >
> >Nothing should happen. Then do
> >
> >    x := nil
> >
> >which should print "was finalized" immediately. This is because x   
> still
> >holds onto a relatively "new" object, which gets freed very fast.
> >
> >However, once an object gets "old" it takes until the next full   
> garbage
> >collection (GC)! Create your object again, but this time, do  this:
> >
> >    Smalltalk garbageCollect.
> >    x := nil.
> >
> >Nothing will be printed, because the GC reclaims all space, but  
> also  marks
> >all surviving objects as "old". So even though after assigning   
> nil to x
> >your object is dead, the finalizer does not know it, yet.  Only if  
> you
> >trigger a full GC again, the object's space is reclaimed,  and the
> >finalizer is activated.
> >
> >- Bert -
>



More information about the Beginners mailing list