[squeak-dev] Re: OrderedCollection enhancements

Levente Uzonyi leves at elte.hu
Wed May 12 00:10:12 UTC 2010


On Mon, 10 May 2010, Andreas Raab wrote:

> Looks fine to me. No obvious weaknesses or problems so there's relatively 
> little to comment on :-) Unless there's something else you want to tweak, go 
> ahead and post it into the trunk.

Thanks for the feedback. I decided to wait for a few days, because these 
changes might break packages which include subclasses of OrderedCollection 
and override/send #grow or #growSize. Though chances are low, there was a 
similar case recently (Set/Dictionary with #findElementOrNil: and 
#fullCheck). So trunk users with such packages (if any) have a chance to 
prepare for these changes.


Levente

>
> Cheers,
>  - Andreas
>
> On 5/10/2010 6:26 PM, Levente Uzonyi wrote:
>> Hi,
>> 
>> 
>> I recently uploaded to versions of the Collections package to the Inbox
>> for review and testing before adding them to the Trunk. These changes
>> affect only rare, but important use-cases of OrderedCollection (and it's
>> subclasses). After evaluating the following snippet:
>> 
>> Installer squeak
>> project: 'inbox';
>> install: 'Collections-ul.359.mcz'
>> 
>> from your up-to-date Trunk image, you can expect the following speedups:
>> 
>> "Add elements without growing to the end."
>> (1 to: 5) collect: [ :run |
>> [
>> | o |
>> o := OrderedCollection new: 100000.
>> 1 to: 100000 do: [ :each | o addLast: each ] ] timeToRun ].
>> #old -> #(19 19 20 19 20).
>> #new -> #(13 14 14 14 14).
>> 
>> "Add elements without growing to the front."
>> (1 to: 5) collect: [ :run |
>> [
>> | o |
>> o := OrderedCollection new: 100000.
>> 1 to: 100000 do: [ :each | o addFirst: each ] ] timeToRun ].
>> #old -> #(14 14 14 14 14).
>> #new -> #(10 11 10 10 10).
>> 
>> "Add elements to both ends with growing."
>> data := Array streamContents: [ :stream |
>> 10000 timesRepeat: [ stream nextPut: 2 atRandom ] ].
>> (1 to: 5) collect: [ :run |
>> [
>> | o input each |
>> o := OrderedCollection new.
>> input := data readStream.
>> [ (each := input next) == nil ] whileFalse: [
>> each = 1
>> ifTrue: [ o addFirst: each ]
>> ifFalse: [ o addLast: each ] ] ] timeToRun ].
>> #old -> #(2367 2393 2377 2426 2404).
>> #new -> #(2 2 2 2 2)
>> 
>> Feedback is welcome, as usual.
>> 
>> 
>> Cheers,
>> Levente
>> 
>> 
>
>
>



More information about the Squeak-dev mailing list