<br><br><div class="gmail_quote">On Tue, Apr 17, 2012 at 9:54 AM, Igor Stasenko <span dir="ltr"><<a href="mailto:siguctua@gmail.com">siguctua@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Performance, yes...<br>
<br>
But i wonder, how much performance we will lose by having more<br>
flexible implementation for ByteString..<br>
<br>
So, here what i did:<br>
<br>
ByteString>>bat: index put: aCharacter<br>
<br>
^ aCharacter putIntoByteString: self at: index<br>
<br>
Character>>putIntoByteString: string at: index<br>
<br>
^ value < 256<br>
ifTrue: [ string basicAt: index put: value ]<br>
ifFalse: [ string at: index put: self ]<br>
<br>
<br>
Now benchmark:<br>
<br>
| s chars |<br>
<br>
s := ByteString new: 1000.<br>
chars := (1 to: 255) collect: [:i | Character value: i ].<br>
<br>
[<br>
1 to: 1000 do: [:i |<br>
chars do: [:char| s at: i put: char ]<br>
].<br>
] bench<br>
<br>
'105 per second.'<br>
<br>
| s chars |<br>
<br>
s := ByteString new: 1000.<br>
chars := (1 to: 255) collect: [:i | Character value: i ].<br>
<br>
[<br>
1 to: 1000 do: [:i |<br>
chars do: [:char| s bat: i put: char ]<br>
].<br>
] bench<br>
<br>
<br>
'91.9 per second.'<br>
<br>
~10%...<br>
<br>
Such kind of difference is IMO laughable,</blockquote><div><br></div><div>I disagree. 10% is a significant loss of performance. It can take huge effort to gain 10% in a VM implementation. It is not at all laughable. Cog is significantly faster than the Interpreter (by factors of 3 or 5). And that performance difference is worth-while. The straw man below isn't a convincing argument either. I don't see what is wrong with using a slower more flexible VM for bootstrapping (or indeed a simulation, or ...). But do we really have to spend time arguing this point? If you think you can do better, then do so. Build a more flexible VM. Then we can compare the two.</div>
<div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> taking into account the<br>
a) more flexibility<br>
b) less VM complexity<br>
<br>
<br>
Another benchmark:<br>
<br>
| s |<br>
<br>
s := ByteString new: 1000.<br>
[<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
s at: 1 put: $A.<br>
] bench<br>
'1,530,000 per second.'<br>
<br>
| s |<br>
<br>
s := ByteString new: 1000.<br>
[<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
s bat: 1 put: $A.<br>
] bench<br>
'1,310,000 per second.'<br>
<br>
<br>
Frankly, i expected much , much more difference. So, i think in this<br>
case we can safely discard the performance argument(s).<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Best regards,<br>
Igor Stasenko.<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br>best,<div>Eliot</div><br>