Perl のベンチマークを気軽にする Benchmarks 書いた
Perl でベンチマークとるなら Benchmark モジュールが鉄板。僕も Benchmark モジュールを使ったベンチ用のテンプレートを用意していて、必要になったらそれを書き換えてベンチをとるのだけど、ベンチ自体はたまにしか書かないから、cmpthese
とか timethese
とかごっちゃに記憶してたりしてそらで書けなくて困る。ほんとはもっと思いついた時にぱっとワンライナーで書けるくらいに気楽にならないかなとずっと思ってた。
そういうわけで、Perl のベンチをもっと気軽にするモジュールを書いた。
Benchmarks
Benchmarks という名前がだいぶ攻めてるが、最初 Benchmark::Simple とかにしようかと思ったけど、あれ、Benchmark::Lite だったっけ?、みたいなのが嫌だったので、s
つけるだけにした。
ルーチン同士を比較するベンチをとっても簡単にする。
use Benchmarks sub {
my $x = 1;
+{
times => sub { $x * $x },
raise => sub { $x ** 2 },
};
};
関数とか一切覚える必要なし。
use Benchmarks;
して、比較したいコードが並んだハッシュリファレンスを返すコードリファレンスを引数に与えるだけ。
カウントを指定したい場合は、第三引数でくっつける。
use Benchmarks sub {
my $x = 1;
+{
times => sub { $x * $x },
raise => sub { $x ** 2 },
};
}, 1000_000;
use 時点であらゆることをしようとするので、ベンチマークの内容によっては逆に使い勝手が悪いかもしれない(が、たいていはこれでいけますよね)。
もし、通常の Benchmark モジュールの方を使いたくなった場合は、use Benchmarks の引数をはずせば、Benchmarkモジュールの関数群はそのまま全てエクスポートされているので、まんま使える。
use Benchmarks;
timethis(1000_000, sub { bless +{}, 'Foo' } );
レッツベンチナウ!