tokuhirom's Blog

Compiler::Lexer をつかって Perl::MinimumVersion::Fast をかいてみた

papix さんのブログをよんでいたところ Compiler::Lexer というものの存在 をしった。http://blog.papix.net/entry/2013/04/30/223840

Compiler::Lexer という Perl5 コードの Lexer を goccy さんがかいている そうだ。これをもちいて Perl::MinimumVersion をかきなおしてみた。

Perl::MinimumVersion は PPI をつかったライブラリで、Perl のコードを解 析してそのコード自体が必要とする Perl のバージョンを判定するものだ。こ れは Test::MinimumVersion を経由して、リリース時に意図せずに //~~ などを 5.8 用のライブラリでつかってしまっていないかを確認するのに やくだつ。実際 Minilla でもつかっているのだが、便利だ。

しかし PPI 自体が遅いというところもあり、より高速な alternative implementation があれば、よりうれしいというのも事実。

そこに Compiler::Lexer の登場である。朗報だ!!

というわけでさっそく実装してみた。もともと、「このバージョン以後でしか つかえない言語機能」の検出にパーサーはオーバースペック。トーカナイザで 十分なのだ。

というわけでできあがった実装がこちら。 https://github.com/tokuhirom/Perl-MinimumVersion-Fast

まだ、Compiler::Lexer 自体が開発中だし CPAN にもあがってないのでこのラ イブラリも実用段階ではないが、こういったコード解析系が簡単にかける上に、 PPI より高速に動作するのならばありがたい話だ。

Compiler::Lexer の今後に要注目だといえよう。