<div dir="ltr"><div class="gmail_quote"><div dir="ltr">Hi all,<div><br></div><div>As I said earlier I am on my way through a student project (cc'ed) to re-write/split/kill MiscPrimitive plugin. The plugin is composed of:</div><div>- 2 Bitmap primitives</div><div>- 1 Sound primitive.</div><div>- 6 ByteObject primitives</div><div><br></div><div>I will discuss here what is plan for each category of primitives. I would like comments and Eliot's approval before moving forward with the student project.</div><div><br></div><div><b>2 Bitmap primitives</b><br></div><div><br></div><div>Those are the compress and uncompress Bitmap primitives. Tim suggested that we move the primitive to the BitBlt plugin (hence converting from SmartSyntax to Slang). I think this is the right thing to do. Agreed ?</div><div><br></div><div><b>1 Sound primitive</b><br></div><div><br></div><div>This primitive can simply be moved to the SoundGenerator plugin. SoundGenerator is also built using SmartSyntax. Agreed ?</div><div><br></div><div><b>6 ByteObject primitives</b><br></div><div><br></div><div><u>1. translate: aString from: start  to: stop  table: table</u></div><div><br></div><div>This primitive seems to be unused. I suggest we move it from a primitive to plain Smalltalk code.</div><div><br></div><div><u>2. stringHash: aString initialHash: speciesHash</u><br></div><div><br></div><div>Since we now have hashMultiply as a primitive, the stringHash primitive is now faster for very small strings with a Smalltalk version using hashMultiply, and slower (2x) on medium to large strings. I suggest we move it to plain Smalltalk code.</div><div><br></div><div><u>3. findFirstInString, indexOfAscii, findSubString</u></div><div><br></div><div>For these 3 primitives we can either add a ByteStringPlugin or add them as numbered primitive. </div><div><div><u><br class="m_-612103856050492836gmail-Apple-interchange-newline">4. compare: string1 with: string2 collated: order</u><br></div><div><br></div><div>This primitive is really important for performance, there are production application spending a huge amount of times for string equality. I suggest that we move this one to a numbered primitive that takes 2 or 3 parameters, the order being optional, and to rewrite the version without order (i.e. the version used by String>>#=, String>>#>, String>>#>=, etc.) in the JIT (numbered primitives are required for that).</div><div><br></div><div>Alternatively we can add a numbered String>>#= numbered primitive and put the compare primitive in a ByteStringPrimitive.</div></div><div><br></div><div><u>5. String concatenation</u></div><div><br></div><div>I would suggest to add in addition ByteString>>#, as a primitive. String concatenation is really important performance wise and that will ease deforestation (i.e. removing the allocation of temporary byte strings) in the Sista JIT which is quite difficult right now. </div><div><br></div><div><b>Conclusion</b></div><div><br></div><div><div>The main question is do we want 1 numbered primitive and 3-5 primitives in a small ByteStringPlugin, or do we want 3-5 numbered primitive. I don't mind either.</div><div><br></div><div>I looked at the performance on the Sista VM, but there is still quite some work to make all of those efficient and in production. Recently other VMs (especially V8) decided to loose some peak performance in exchange for better baseline performance since many applications they were running were spending only 15-20% of the time in optimised code and 80-85% in baseline code, so primitive performance is a big deal no matter what we have in the future.</div><div><br></div><div><br></div>-- <br><div class="m_-612103856050492836gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>Clément Béra<div><a href="https://clementbera.wordpress.com/" target="_blank">https://clementbera.wordpress.<wbr>com/</a><br></div><div><span style="color:rgb(34,34,34);font-family:arial,sans-serif;line-height:16px;background-color:rgb(255,255,255)">Bâtiment B 40, avenue Halley 59650 </span><em style="font-weight:bold;font-style:normal;font-family:arial,sans-serif;line-height:16px;background-color:rgb(255,255,255)">Villeneuve d'Ascq</em></div></div></div></div></div></div></div></div></div></div></div></div></div>
</div>