[squeak-dev] Re: Weak collection changes

Levente Uzonyi leves at elte.hu
Thu Feb 4 05:07:22 UTC 2010


On Wed, 3 Feb 2010, Andreas Raab wrote:

> Levente Uzonyi wrote:
>> I uploaded a new version of the Collections package to the Inbox 
>> (Collections-ul.295) for reviewing.
>
> Looks good to me. The one thing I'm wondering about is whether 
> WeakKeyDictionary shouldn't initialize its finalizer by default to something 
> like [:item| item finalize]?

I preserved the original behavior and I think it's correct, because 
you don't know what the dictionary will be used for.


Levente

>
> Cheers,
>  - Andreas
>
>> If contains the following changes:
>> 
>> WeakSet:
>> - new grow strategy implemented via #growSize (it can actually shrink if
>>   too many elements are garbageCollected)
>> - semantic change: #slowSize doesn't change (decrease) the value of tally
>>   so it doesn't supress growing
>> - #fixCollisionsFrom: recycles free slots
>> 
>> WeakKeyDictionary:
>> - new finalization strategy: push model instead of pull (via finalizer)
>> - new instance variable named finalizer. If it's value is not nil, then it
>>   will be evaluated with the finalized associations' value
>> - #fixCollisionsFrom: finalizes values and recycles free slots, instead of
>>   rehashing (this boosts performance)
>> - new method: #slowSize which counts only those associations which have a
>>   not nil key
>> - new grow stategy (same as WeakSet's)
>> - #finalizeValues: is deprecated
>> - #noCheckNoGrowFillFrom: (used by #grow and #rehash) finalizes values via
>>   finalizer if it's not nil
>> - cosmetic changes
>> 
>> WeakRegistry:
>> - new instance variable named objectsToFinalize, it's value is nil or
>>   an OrderedCollection which collects the executors of garbage collected
>>   objects. Access to objectsToFinalize always protected.
>> - new finalization strategy uses the finalizing capability of
>>   WeakKeyDictionary. WeakRegistry adds a finalizer block to its
>>   WeakKeyDictionary which adds the received object to objectsToFinalize
>> - #finalizeValues, #remove:ifAbsent: simplified
>> - #finalizeValues has O(size) runtime worst case
>> - cosmetic changes
>> 
>> +a postscript for installing the finalizer blocks
>> 
>> Passes all tests in WeakRegistryTest.
>> 
>> 
>> It can be loaded to clean Trunk images (tested in 8972), but it has to be 
>> splitted (or tweaked) if we decide to add these to the trunk. Also further 
>> minor changes are on the way.
>> 
>> 
>> Cheers,
>> Levente
>> 
>> 
>
>
>



More information about the Squeak-dev mailing list