finalization

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

finalization

Ben Coman
I thought I was starting to get a grip on how finalization work.  I
made this example...

    Object subclass: #MyObject
        instanceVariableNames: ''
        classVariableNames: ''
        package: 'Play'

    MyObject>>autoRelease
       ^ self class finalizationRegistry add: self

    MyObject>>finalize
        Transcript crShow: 'Finalizing MyObject'

    o := MyObject new autoRelease.
    o := nil.
    Smalltalk garbageCollect.   ==> 'Finalizing MyObject'

So far so good.  Extrapolating... I would *expect* this...

    oc := OrderedCollection new.
    10 timesRepeat: [ oc add: Libclang getClangVersion ].
    oc removeAll.
    oc := nil.
    Smalltalk garbageCollect.

...to print 'Finalizing MyObject' ten times, but it does nothing!!

Such a simple example feeds my naive presumption that the system seems
broken. So could someone help me interpret this result ?

cheers -ben

Reply | Threaded
Open this post in threaded view
|

Re: finalization

Ben Coman
Apologies.   What a bogus post!   I must have been really tripping....

On Tue, Sep 6, 2016 at 9:26 PM, Ben Coman <[hidden email]> wrote:

> I thought I was starting to get a grip on how finalization work.  I
> made this example...
>
>     Object subclass: #MyObject
>         instanceVariableNames: ''
>         classVariableNames: ''
>         package: 'Play'
>
>     MyObject>>autoRelease
>        ^ self class finalizationRegistry add: self
>
>     MyObject>>finalize
>         Transcript crShow: 'Finalizing MyObject'
>
>     o := MyObject new autoRelease.
>     o := nil.
>     Smalltalk garbageCollect.   ==> 'Finalizing MyObject'
>
> So far so good.  Extrapolating... I would *expect* this...
>
>     oc := OrderedCollection new.
>     10 timesRepeat: [ oc add: Libclang getClangVersion ].
>     oc removeAll.
>     oc := nil.
>     Smalltalk garbageCollect.
>
> ...to print 'Finalizing MyObject' ten times, but it does nothing!!
>

Duh! I didn't send autorelease inside the timesRepeat above...

Duh^2 !!  that example didn't even refer to MyObject!!!!!

Of course fixing those two things to get...
    10 timesRepeat: [ oc add: MyObject new autoRelease. ].
works perfectly!

> Such a simple example feeds my naive presumption that the system seems
> broken. So could someone help me interpret this result ?

Sorry for the noise.  Pure PIBKAM**.  Couldn't see the trees for the forest.

cheers -ben


**problem is between keyboard and mouse.

Reply | Threaded
Open this post in threaded view
|

Re: finalization

stepharo
Ben

no stress. Now what I would love is an example that we can put in the
uFFI chapter :)

Stef


Le 6/9/16 à 17:32, Ben Coman a écrit :

> Apologies.   What a bogus post!   I must have been really tripping....
>
> On Tue, Sep 6, 2016 at 9:26 PM, Ben Coman <[hidden email]> wrote:
>> I thought I was starting to get a grip on how finalization work.  I
>> made this example...
>>
>>      Object subclass: #MyObject
>>          instanceVariableNames: ''
>>          classVariableNames: ''
>>          package: 'Play'
>>
>>      MyObject>>autoRelease
>>         ^ self class finalizationRegistry add: self
>>
>>      MyObject>>finalize
>>          Transcript crShow: 'Finalizing MyObject'
>>
>>      o := MyObject new autoRelease.
>>      o := nil.
>>      Smalltalk garbageCollect.   ==> 'Finalizing MyObject'
>>
>> So far so good.  Extrapolating... I would *expect* this...
>>
>>      oc := OrderedCollection new.
>>      10 timesRepeat: [ oc add: Libclang getClangVersion ].
>>      oc removeAll.
>>      oc := nil.
>>      Smalltalk garbageCollect.
>>
>> ...to print 'Finalizing MyObject' ten times, but it does nothing!!
>>
> Duh! I didn't send autorelease inside the timesRepeat above...
>
> Duh^2 !!  that example didn't even refer to MyObject!!!!!
>
> Of course fixing those two things to get...
>      10 timesRepeat: [ oc add: MyObject new autoRelease. ].
> works perfectly!
>
>> Such a simple example feeds my naive presumption that the system seems
>> broken. So could someone help me interpret this result ?
> Sorry for the noise.  Pure PIBKAM**.  Couldn't see the trees for the forest.
>
> cheers -ben
>
>
> **problem is between keyboard and mouse.
>
>


Reply | Threaded
Open this post in threaded view
|

Re: finalization

Ben Coman
I'm documenting what I'm learning in a format for a blog post that
might be the basis for something.

cheers -ben

On Wed, Sep 7, 2016 at 3:40 AM, stepharo <[hidden email]> wrote:

> Ben
>
> no stress. Now what I would love is an example that we can put in the uFFI
> chapter :)
>
> Stef
>
>
> Le 6/9/16 à 17:32, Ben Coman a écrit :
>
>> Apologies.   What a bogus post!   I must have been really tripping....
>>
>> On Tue, Sep 6, 2016 at 9:26 PM, Ben Coman <[hidden email]> wrote:
>>>
>>> I thought I was starting to get a grip on how finalization work.  I
>>> made this example...
>>>
>>>      Object subclass: #MyObject
>>>          instanceVariableNames: ''
>>>          classVariableNames: ''
>>>          package: 'Play'
>>>
>>>      MyObject>>autoRelease
>>>         ^ self class finalizationRegistry add: self
>>>
>>>      MyObject>>finalize
>>>          Transcript crShow: 'Finalizing MyObject'
>>>
>>>      o := MyObject new autoRelease.
>>>      o := nil.
>>>      Smalltalk garbageCollect.   ==> 'Finalizing MyObject'
>>>
>>> So far so good.  Extrapolating... I would *expect* this...
>>>
>>>      oc := OrderedCollection new.
>>>      10 timesRepeat: [ oc add: Libclang getClangVersion ].
>>>      oc removeAll.
>>>      oc := nil.
>>>      Smalltalk garbageCollect.
>>>
>>> ...to print 'Finalizing MyObject' ten times, but it does nothing!!
>>>
>> Duh! I didn't send autorelease inside the timesRepeat above...
>>
>> Duh^2 !!  that example didn't even refer to MyObject!!!!!
>>
>> Of course fixing those two things to get...
>>      10 timesRepeat: [ oc add: MyObject new autoRelease. ].
>> works perfectly!
>>
>>> Such a simple example feeds my naive presumption that the system seems
>>> broken. So could someone help me interpret this result ?
>>
>> Sorry for the noise.  Pure PIBKAM**.  Couldn't see the trees for the
>> forest.
>>
>> cheers -ben
>>
>>
>> **problem is between keyboard and mouse.
>>
>>
>
>