Hachioji.pm 日めくりテックトーク

Compiler::Lexerを使ったモジュール達

Hachioji.pm Advent Calendarの17日目です. 担当はもう何度記事を書いたかわからなくなってきたpapixです.
今日は, 最近注目を集めている@goccyさん製のPerl用トーカナイザ, Compiler::Lexerを活用したモジュール達を紹介したいと思います.

Perl::MinimumVersion::Fast by @tokuhirom

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

tokuhiromさんが作った, 「あるPerlのコードが, どのPerlのバージョンを必要とするか」を確認できるモジュール.
本家のPerl::MinimumVersionはPPIで実装されており, これをtokuhiromさんがCompiler::Lexer化して完成したものです.
このモジュールを使えば, Perl 5.8を対象としたライブラリで//~~を使っていないかどうかを確認したりできます.

Test::Synopsis::Expectation by @moznion

SYNOPSISのコメントを使ってテストするTest::Synopsis::Expectation
Test::Synopsis::Expectationというモジュールをリリースしました

@t_wadaさんから大絶賛を受けていた, moznionさんのモジュールです.

Synopsisのコメントを使ってテストをするモジュールです.
「モジュールの挙動がよくわからなかったら, とりあえずSynopsisを動かしてみる」という人にとって, 肝心のSynopsisが間違っている(Syntaxが間違ってるとか, 過去の仕様に準拠したSynopsisだったりとか...)と結構困ります.
モジュール開発者がこのモジュールでテストをしておけば, Synopsisが本当に正しいかどうかを確認することができるので, このようなトラブルを回避できるようになります.

このモジュールをつくる為に, moznionさんはCompiler::Lexerにいくつかのパッチを送っていました.
ただ, 「時折Compiler::Lexerが原因? でテストがコケる...」という症状があるらしく, 現在PPI版の実装に取り組んでいるとのことです.
将来的には, 後述のTest::LocalFunctionsのように, バックエンドをPPIとCompiler::Lexerから選べるようになるのではないでしょうか.

Test::LocalFunctions::Fast by @moznion / @papix

Test::LocalFunctions というモジュールを書いてました
Test::LocalFunctions::Fastというモジュールを作った.
Test::LocalFunctions::FastをTest::LocalFunctionsにマージしてもらいました.

Test::LocalFunctionsは, モジュールの中で使われていないローカル関数がないかテストする為のモジュールです.
元々はmoznionさんがPPIを使って実装していて, それをpapix(私)がCompiler::Lexerを使って高速化し, Test::LocalFunctions::Fastの名前でGitHubに公開しました.
最終的には, Test::LocalFuctionsにマージしてもらってmoznionさんが管理・リリースしています.

Test::UsedModules::Fast by @papix

Test::UsedModules::Fastに心が折れたので, Test::UsedModulesの紹介をします

Test::UsedModulesは, こちらもまたまたmoznionさんが開発された, 必要のないモジュールをuse/requireしていないか確認してくれるモジュールです.
このモジュールもPPIで実装されていたので, papix(私)がCompiler::Lexerを使って高速化してみました.
PPIとCompiler::Lexerの差で随分苦労したのですが, 最終的には何とか完成までこぎつけることができました.
こちらも, 本家(Test::UsedModules)にマージしてもらうつもりだったのですが... いろいろ忙しくて, その辺りの作業を放置して今に至っています.

とりあえず暫定版がこちらにありますので, 試してみたい方はどうぞ.

まとめ

Compiler::Lexerを活用したモジュールを紹介してみました.
ここ最近, Compiler::Lexerはかなり安定してきた(以前は時折SEGVったりすることがありました...)と印象を持っているので, モジュールを開発する中でPerlのトーカナイザが必要であれば, 使ってみる価値があると思います.

Compiler::Lexerを含むgoccyさんのプロダクトに要注目ですね!

created by
papix
created at
last modified at
2013-12-21 03:27
comments powered by Disqus