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 <[email protected]>:
>
> 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
>> [email protected]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to