Yes, in the end it’s not working out for me, sadly. I think it’s because of that, but I’m not sure as it’s complicated … I’ll show you next week if you want to know more.
> On Jan 14, 2015, at 16:14, Luc Fabresse <luc.fabre...@gmail.com> wrote: > > Hi Johan, > > Be careful, it is not the object that will execute the finalizing code but a > shallow copy of it. > It can lead to deep debugging session sometimes ;-) > > o := Object new. > WeakRegistry default add: o. "a shallow copy of o is registered" > o := nil. > Smalltalk garbageCollect. > "the shallow copy of o will receive the finalize message" > > Cheers, > > Luc > > 2015-01-14 19:13 GMT+01:00 Johan Fabry <jfa...@dcc.uchile.cl > <mailto:jfa...@dcc.uchile.cl>>: > > Yes, adding it to the weak registry does the trick! Thank you Esteban for the > pointer and Torsten for the magic line of code WeakRegistry default add: > anObject. > > Being able to hook into the GC in this way is extremely cool, it saves me a > lot of housekeeping work and I am very happy because of that ! > > > On Jan 13, 2015, at 17:35, Torsten Bergmann <asta...@gmx.de > > <mailto:asta...@gmx.de>> wrote: > > > > Esteban wrote: > >> you also need to register the object for cleanup, in the WeakRegistry. > >> (not on my machine, sorry I cannot put an example, but look around) > > > > It is simple and here is an example: > > > > > > Create a class: > > > > Object subclass: #Bar > > instanceVariableNames: 'id' > > classVariableNames: '' > > category: 'Foo' > > > > implemented an #initialize method > > > > initialize > > super initialize. > > id := UUID new. > > Transcript show: 'Initialized ', id printString; cr > > > > and implemented a finalization method: > > > > finalize > > > > Transcript show: 'Finalized ', id printString; cr > > > > Now in the workspace I instantiate the object: > > > > |anObject| > > Transcript open; clear. > > anObject := Bar new. > > Transcript flush. > > WeakRegistry default add: anObject. > > > > and by forcing garbage collection in a second step I can > > see that the finalization method is working: > > > > 3 timesRepeat: [ Smalltalk garbageCollect ]. > > Transcript flush. > > > > > > And I get the following output > > > > Initialized 4aa47ef1-0e4c-9a47-bddf-b406ee2042e4 > > Finalized 4aa47ef1-0e4c-9a47-bddf-b406ee2042e4 > > > > If it doesnt work check your VM for updates. > > > > I'm using Pharo4.0 Latest update: #40442 on Windows with the following VM: > > Win32 built on Sep 4 2014 01:13:32 Compiler: 4.6.2 VMMaker versionString > > https://github.com/pharo-project/pharo-vm.git > > <https://github.com/pharo-project/pharo-vm.git> > > Commit: c7bc23dd6053d5f9934f7dd427537f76fc96eb32 Jenkins build #14851 > > > > > > ---> Save our in-boxes! http://emailcharter.org <http://emailcharter.org/> > <--- > > Johan Fabry - http://pleiad.cl/~jfabry <http://pleiad.cl/~jfabry> > PLEIAD lab - Computer Science Department (DCC) - University of Chile > > > ---> Save our in-boxes! http://emailcharter.org <--- Johan Fabry - http://pleiad.cl/~jfabry PLEIAD lab - Computer Science Department (DCC) - University of Chile