rubyists-


i searched the wiki and comp.lang.ruby and found several examples of using
finalizers.  strangely, though they work for some people, not all work for me :

  #!/usr/bin/env ruby

  class Test
    def Test.finalizer
      Proc.new{ puts "finalizing" }
    end
    def initialize
      ObjectSpace.define_finalizer(self, Test.finalizer)
    end
  end
  t = Test.new

  class A
    def initialize
       ObjectSpace.define_finalizer(self, proc{|id| puts "final #{id}"})
    end
  end
  a = A.new


outputs only

"finalizing"

thus the second technique does not work...


here's my setup

  /tmp > uname -a
  Linux 2.4.2-2 #1 SMP Fri Nov 23 20:51:15 GMT 2001 i686 unknown

  /tmp > ruby -v
  ruby 1.6.6 (2001-12-26) [i686-linux]


i found quite a few references that claim the finalizing proc may not contain
references to the object in question, since it would therefore, never be
candidate for gc...  my experiements show this to be true, but 'the book' seems
to think otherwise... what's the deal?

from the book:

define_finalizer
                                  ObjectSpace.define_finalizer( anObject, aProc=proc() )
                                  Adds aProc as a finalizer, to be called when anObject is about to be
                                  destroyed.

note the 'about' part.  is this correct?

thanks for any insight.

-ara


-- 

 ====================================
 | Ara Howard
 | NOAA Forecast Systems Laboratory
 | Information and Technology Services
 | Data Systems Group
 | R/FST 325 Broadway
 | Boulder, CO 80305-3328
 | Email: ahoward / fsl.noaa.gov
 | Phone:  303-497-7238
 | Fax:    303-497-7259
 ====================================