On Sat, Feb 02, 2013 at 06:32:10PM -0800, Matthew Wilson wrote:
> Did you mean to use $z in the say output of the nqp and perl versions of
> the microbenchmark, or did you mean to run it twice?

I didn't write the nqp microbenchmark, and I simply transcribed it to
Perl 5, so it's intentional. I didn't spot it, thanks for noticing.

It doesn't actually change the numbers, because the timing is still for one
call. But it does cause the program to do a lot less work to get there.

$ cat ~/Perl/rakudo/nqp/examples/fib.nqp
#! nqp

sub fib($n) {
    $n < 2 ?? $n !! fib($n-1) + fib($n - 2);
}

my $N := @ARGS > 1 ?? @ARGS[1] !! 29;

my $t0 := nqp::time_n();
my $z  := fib($N);
my $t1 := nqp::time_n();

nqp::say("fib($N) = $z");
nqp::say("time    = " ~ ($t1-$t0));
$ nqp ~/Perl/rakudo/nqp/examples/fib.nqpfib(29) = 514229
time    = 3.2875030040741
$ nqp nqp-jvm-cc.nqp ~/Perl/rakudo/nqp/examples/fib.nqp
fib(29) = 514229
time    = 0.39100003242492676



and Perl 5:



$ cat ~/test/fib.pl 
#! perl

use Time::HiRes 'time';

sub fib {
    my $n = shift;
    $n < 2 ? $n : fib($n-1) + fib($n - 2);
}

my $N = @ARGV > 1 ? $ARGV[0] : 29;

my $t0 = time;
my $z  = fib($N);
my $t1 = time;

print "fib($N) = $z\n";
print "time    = " . ($t1-$t0) . "\n";
$ ~/Sandpit/5162/bin/perl5.16.2 ~/test/fib.pl
fib(29) = 514229
time    = 0.5503830909729

Nicholas Clark

Reply via email to