<br><br><div class="gmail_quote">On Tue, Apr 17, 2012 at 9:54 AM, Igor Stasenko <span dir="ltr">&lt;<a href="mailto:siguctua@gmail.com">siguctua@gmail.com</a>&gt;</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&gt;&gt;bat: index put: aCharacter<br>
<br>
        ^ aCharacter putIntoByteString: self at: index<br>
<br>
Character&gt;&gt;putIntoByteString: string at: index<br>
<br>
        ^ value &lt; 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>
 &#39;105 per second.&#39;<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>
 &#39;91.9 per second.&#39;<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&#39;t a convincing argument either.  I don&#39;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>
 &#39;1,530,000 per second.&#39;<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>
 &#39;1,310,000 per second.&#39;<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>