lis.pl のパフォーマンス
オレオレ lispl のパフォーマンスをしらべてみた。ベタに fib benchmark です。
えーと、、300倍ぐらい perl にくらべて遅いかんじ。これを高速化するには、xsで書きなおす以外の方策はなさそうです。
(warning: too few iterations for a reliable count)
s/iter lispl perl
lispl 3.51 -- -100%
perl 1.20e-02 29125% --
以下、ベンチマークコードです。
use Benchmark qw(cmpthese timethese);
require 'lis.pl';
my $lispl = Lispl->new();
$lispl->evaluate($lispl->parse(<<'...'));
(define fib (lambda (n)
(if (< n 2)
1
(+ (fib (- n 1)) (fib (- n 2))))))
...
my $tree = $lispl->parse('(fib 20)');
# test
{
my $a = fib(20);
my $b = $lispl->evaluate($tree);
$a == $b or die "$a != $b";
}
cmpthese(
10 => {
'perl' => sub { fib(20) },
'lispl' => sub { $lispl->evaluate($tree) },
}
);
sub fib {
$_[0] < 2 ? 1 : fib($_[0]-1) + fib($_[0]-2)
}
Published: 2012-07-06(Fri) 10:10