[Vm-dev] Class checks in the vm
Igor Stasenko
siguctua at gmail.com
Tue Apr 17 16:54:38 UTC 2012
Performance, yes...
But i wonder, how much performance we will lose by having more
flexible implementation for ByteString..
So, here what i did:
ByteString>>bat: index put: aCharacter
^ aCharacter putIntoByteString: self at: index
Character>>putIntoByteString: string at: index
^ value < 256
ifTrue: [ string basicAt: index put: value ]
ifFalse: [ string at: index put: self ]
Now benchmark:
| s chars |
s := ByteString new: 1000.
chars := (1 to: 255) collect: [:i | Character value: i ].
[
1 to: 1000 do: [:i |
chars do: [:char| s at: i put: char ]
].
] bench
'105 per second.'
| s chars |
s := ByteString new: 1000.
chars := (1 to: 255) collect: [:i | Character value: i ].
[
1 to: 1000 do: [:i |
chars do: [:char| s bat: i put: char ]
].
] bench
'91.9 per second.'
~10%...
Such kind of difference is IMO laughable, taking into account the
a) more flexibility
b) less VM complexity
Another benchmark:
| s |
s := ByteString new: 1000.
[
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
s at: 1 put: $A.
] bench
'1,530,000 per second.'
| s |
s := ByteString new: 1000.
[
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
s bat: 1 put: $A.
] bench
'1,310,000 per second.'
Frankly, i expected much , much more difference. So, i think in this
case we can safely discard the performance argument(s).
--
Best regards,
Igor Stasenko.
More information about the Vm-dev
mailing list