What about a native perl6 range loop?  Couldn't there be some way for Perl 6 / 
Rakudo to generate code competitive on a small range with the "native-loop" 
example?

perl6 -e '
    {
        my int ($a, $one, $three) = (42, 1, 3);
        for ^10_000_000 { $a += $one + $a%$three };
        say now - ENTER now;
        say $a
    }
    {
        # 50% slower with loop invariant $limit
        my int ($a, $one, $three) = (42, 1, 3);
        my int $limit = 10_000_000; # my removing "int" does not effect perf
        for ^$limit { $a += $one + $a%$three };
        say now - ENTER now;
        say $a
    }
    {
        my int ($a, $one, $three, $limit) = (42, 1, 3, 10_000_000);
        loop (my int $i = 0; $i < $limit; $i++) { $a += $one + $a%$three };
        say now - ENTER now;
        say $a
    }'

...program prints...

2.10023098  # perl6 loop
15000042
3.2119384   # attempt at native perl 6 loop
15000042
0.7915038   # native loop
15000042

Reply via email to