[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