[squeak-dev] OrderedCollection enhancements
Levente Uzonyi
leves at elte.hu
Tue May 11 01:26:12 UTC 2010
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
|