続 Perl::Lintと Perl::Criticを性能評価してみた
@moznionさんより最新版では早くなっているという
ことなので改めて計測してみました.
傾向を見るためにファイルの行数別に測定を分けてみました.
ベンチマークコード
#!perl use strict; use warnings; use Benchmark qw/cmpthese/; use Perl::Critic; use Perl::Lint; my $file = shift; my $linter = Perl::Lint->new; my $critic = Perl::Critic->new; cmpthese(-3, { 'Perl::Lint' => sub { $linter->lint($file); }, 'Perl::Critic' => sub { $critic->critique($file); }, });
7746ファイルに対して上記のコードを実行.
詳しくは見ていないが, 2割程度のファイルは Perl::Lintでは
glibcの malloc, freeチェックにひっかかったり, その他エラーで
結果が得られなかった.
グラフの見方
性能比は Benchmarkモジュールの結果そのままで, Perl::Lint視点です.
0%だとPerl::Criticと差がなく, 100%だと Perl::Criticの 2倍早い,
- 50%だと半分の性能となります.
おわりに
@moznionさんのおっしゃるとおり確かに早くなっているっぽいです.
前回のときは, Perl::Criticの方が早い方が多かったんですけど, 今回計測
したら Perl::Lintの方が早いものが多かったです. ファイル長が長いほど,
Perl::Lintの方が高速であるという傾向があるのでいい感じです.
ただ問題がありまして, 上述の通り, 前回同様かなりのファイルが
計測できない, 正しくチェックされないという事態となりました.
Perl::Lintの方が早すぎる結果が得られている場合はだいたい正しく
チェックされていないと考えてよいです.
ツールがツールだけに一つでもまともに動かないというものが
あると困るので現状はとても使用できないという感じでしょうか.
ツールの用途として, 早いけど正しく問題点が指摘されないよりかは
遅くてもちゃんと指摘してくれる方がよいので, 使えるようになるのは
だいぶ先かと思います. 正確さが Perl::Criticと同等になったときに
また比較したいと思います.