From: ts Date: 2005-04-13T17:11:21+09:00 Subject: Re: ability to run finalizers at a given point of a program? >>>>> "G" == Guillaume Cottenceau writes: G> What version of Ruby are you running? With your example I can see: 1.8.2 svg% cat b.rb #!/usr/local/bin/ruby -v class Foo def initialize puts "*** constructor" end def self.final proc { puts "*** pseudo-destructor" } end end def scopeme foo = Foo.new ObjectSpace.define_finalizer(foo, Foo.final) end a = scopeme puts "Foo was out-scoped." GC.start puts "Gc was run." svg% svg% b.rb ruby 1.8.2 (2004-12-25) [i686-linux] *** constructor Foo was out-scoped. *** pseudo-destructor Gc was run. svg% G> What difference do you pretend your program is making with mine? closure + assignement svg% diff -u b.rb~ b.rb --- b.rb~ 2005-04-13 10:08:15.000000000 +0200 +++ b.rb 2005-04-13 10:08:40.000000000 +0200 @@ -13,7 +13,7 @@ ObjectSpace.define_finalizer(foo, Foo.final) end -a = scopeme +scopeme puts "Foo was out-scoped." GC.start svg% svg% b.rb ruby 1.8.2 (2004-12-25) [i686-linux] *** constructor Foo was out-scoped. Gc was run. *** pseudo-destructor svg% the GC is conservative. Guy Decoux