No, please no more inilining hacks. :) If someone wants to run everything at light speed - just code in C, but leave smalltalk honoring the message passing. And besides, these tricks won't make any difference when having good inlining JIT. In bytecode, they just add a complexity to compiler and headache to developers. 2009/11/13 Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:
There is also a difference between:
[self atEnd ifTrue: [^nil]. self next. true] whileTrue.
and:
[self atEnd ifTrue: [^nil] self next] repeat.
Warning: it's quite easy to add Compiler inlining rules, a bit tougher to add corresponding Decompiler tricks.
2009/11/13 Marcus Denker <denker@acm.org>:
On Nov 13, 2009, at 9:51 AM, Cédrick Béler wrote:
Hi,
I noticed quite a difference between the two method who "looks" the same to me. Is it normal ?
Normal. to:do: is lnlined (compiled as jumps in the bytecode), whereas timesRepeat: is a message send with a closure activation.
    Marcus
fun is the difference between:
    (1 to : 10000) do: and     1 to: 10000 do:
one is compiled to jumps, the other not and in addition creates a temp collection.
    Marcus
I use a rc image (haven't tested in squeak). And it's the same on windows and linux.
count := 0. [1 to: 10000000 do: [:i | count :=count + 1]] timeToRun." 677" count := 0. [10000000 timesRepeat: [count := count + 1]] timeToRun" 2571"
If not normal, I'll open a issue.
Thanks
-- Cédrick _______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Best regards, Igor Stasenko AKA sig.