<div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000">
<div>Hi all!</div><div><br></div><div>Here are some benchmarks. Same context as here:</div><div><a href="http://forum.world.st/The-Inbox-ShoutCore-mt-78-mcz-tp5118289p5118351.html"><span style="font-size: 10pt">http://forum.world.st/The-Inbox-ShoutCore-mt-78-mcz-tp5118289p5118351.html</span></a><br></div><div><br></div><div>=== BEFORE ===</div><div><br></div><div>{</div><div> "FFITestLibrary>>ffiPrintString:":[</div><div> "39,800 per second. 25.1 microseconds per run. 7.5 % GC time.",</div><div> "41,600 per second. 24 microseconds per run. 3.72 % GC time.",</div><div> "40,800 per second. 24.5 microseconds per run. 3.92 % GC time."</div><div> ],</div><div> "BitBlt>>copyBits":[</div><div> "5,610 per second. 178 microseconds per run. 2.26 % GC time.",</div><div> "5,590 per second. 179 microseconds per run. 2.65947 % GC time.",</div><div> "5,550 per second. 180 microseconds per run. 2.95941 % GC time."</div><div> ],</div><div> "ExternalPoolReadWriter>>fetchFromFile":[</div><div> "25,800 per second. 38.7 microseconds per run. 2.9794 % GC time.",</div><div> "25,800 per second. 38.8 microseconds per run. 3.19936 % GC time.",</div><div> "26,000 per second. 38.5 microseconds per run. 3.14 % GC time."</div><div> ],</div><div> "Win32Pool class>>winver":[</div><div> "16,100 per second. 62 microseconds per run. 3.65927 % GC time.",</div><div> "16,200 per second. 61.7 microseconds per run. 3.66 % GC time.",</div><div> "16,100 per second. 62 microseconds per run. 3.52 % GC time."</div><div> ]</div><div>}</div><div><br></div><div>=== AFTER ===</div><div><br></div><div>{</div><div> "FFITestLibrary>>ffiPrintString:":[</div><div> "37,200 per second. 26.8 microseconds per run. 7.4785 % GC time.",</div><div> "37,800 per second. 26.4 microseconds per run. 6.77864 % GC time.",</div><div> "37,400 per second. 26.7 microseconds per run. 7.16 % GC time."</div><div> ],</div><div> "BitBlt>>copyBits":[</div><div> "5,140 per second. 195 microseconds per run. 8.04 % GC time.",</div><div> "5,220 per second. 192 microseconds per run. 8.22 % GC time.",</div><div> "5,270 per second. 190 microseconds per run. 8.22 % GC time."</div><div> ],</div><div> "ExternalPoolReadWriter>>fetchFromFile":[</div><div> "24,000 per second. 41.7 microseconds per run. 9.43811 % GC time.",</div><div> "23,900 per second. 41.9 microseconds per run. 9.25815 % GC time.",</div><div> "23,500 per second. 42.6 microseconds per run. 9.3 % GC time."</div><div> ],</div><div> "Win32Pool class>>winver":[</div><div> "13,900 per second. 72.1 microseconds per run. 8.88 % GC time.",</div><div> "13,700 per second. 73 microseconds per run. 8.58 % GC time.",</div><div> "13,800 per second. 72.6 microseconds per run. 8.7 % GC time."</div><div> ]</div><div>}</div><div><br></div><div>Best,</div><div>Marcel</div><div class="mb_sig"></div>
<blockquote class="history_container" type="cite" style="border-left-style: solid;border-width: 1px;margin-top: 20px;margin-left: 0px;padding-left: 10px;min-width: 500px">
<p style="color: #AAAAAA; margin-top: 10px;">Am 13.06.2020 11:01:53 schrieb commits@source.squeak.org <commits@source.squeak.org>:</p><div style="font-family:Arial,Helvetica,sans-serif">A new version of Compiler was added to project The Inbox:<br>http://source.squeak.org/inbox/Compiler-mt.437.mcz<br><br>==================== Summary ====================<br><br>Name: Compiler-mt.437<br>Author: mt<br>Time: 13 June 2020, 11:01:44.448351 am<br>UUID: ca2e1da8-da26-a840-ae3e-1822ce8ba67d<br>Ancestors: Compiler-mt.436<br><br>Speed-up method-based hook for custom pragma-parsing methods. Like in ShoutCore-mt.79<br><br>=============== Diff against Compiler-mt.436 ===============<br><br>Item was changed:<br> ----- Method: Parser>>pragmaStatement (in category 'pragmas') -----<br> pragmaStatement<br> "Read a single pragma statement. Dispatch to the first available pragma parser using the current token as a simple getter to be called on self. If no pragma parser can be found, parse it as usual in the keywords form.<br> <br> Note that custom pragma parsers need to fulfill two requirements:<br> (1) method selector must match the current token as simple getter,<br> e.g., <apicall: ...=""> matches #apicall or <primitive: ...=""> matches #primitive<br> (2) method must declare <pragmaparser> to be called.<br> This is for the protection of the parser's (message) namespace."<br> <br>+ | parserSelector |<br>- | parserSelector parserMethod |<br> (hereType = #keyword or: [ hereType = #word or: [ hereType = #binary ] ])<br> ifFalse: [ ^ self expected: 'pragma declaration' ].<br> <br>+ (here last == $:<br>+ and: [(parserSelector := Symbol lookup: here allButLast) notNil])<br>+ ifFalse: ["Quick exit to not break one-word pragmas such as <primitive> and <foobar>; also avoid interning new symbols for made-up pragmas such as for <my: 1="" new:="" 2="" pragma:="" 3=""> not interning #my."<br>+ ^ self pragmaStatementKeywords].<br>- (self class includesSelector: (parserSelector := here asSimpleGetter)) ifTrue: [<br>- ((parserMethod := self class compiledMethodAt: parserSelector) pragmas<br>- anySatisfy: [:pragma | pragma keyword == #pragmaParser])<br>- ifTrue: [^ self executeMethod: parserMethod]].<br> <br>+ self class methodDict<br>+ at: parserSelector<br>+ ifPresent: [:parserMethod |<br>+ (parserMethod pragmas<br>+ anySatisfy: [:pragma | pragma keyword == #pragmaParser])<br>+ ifTrue: [^ self executeMethod: parserMethod]].<br>+ <br> ^ self pragmaStatementKeywords!<br><br><br></my:></foobar></primitive></pragmaparser></primitive:></apicall:></div></blockquote></div>