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