Released Perl::PrereqScanner::Lite
(日本語は英語の後にあります)
I released Perl::PrereqScanner::Lite.
https://github.com/moznion/Perl-PrereqScanner-Lite
https://metacpan.org/release/Perl-PrereqScanner-Lite
This module is the fast edition of Perl::PrereqScanner.
Perl::PrereqScanner has been using PPI as tokenizer, however Perl::PrereqScanner::Lite uses Compiler::Lexer as tokenizer. Moreover it excludes dependency to Moose. Consequently, Perl::PrereqScanner::Lite realized the acceleration. It is faster about 30 times than Perl::PrereqScanner *1.
Now this module can extract modules as prereqs that are declared in use
statement and require
statement. Besides it can extract modules that are declared in extends
notation (member of Moose family) by using Moose
extra scanner. And it is able to extract version number that is specified as Foo::Bar->VERSION(1.0.0)
by using Version
extra scanner.
If you want other extra scanners, make module that has such as the name; Perl::PrereqScanner::Lite::SCANNER_NAME
which has the method of scan()
, and register extra scanner by add_extra_scanner('SCANNER_NAME')
method.
I put this module in App::scan_prereqs_cpanfile.
Now, you can try scan-prereqs-cpanfile
with fast mode.
$ scan-prereqs-cpanfile --fast
--fast
option enables fast mode. Fast mode means, scan-prereqs-cpanfile uses Perl::PrereqScanner::Lite as the backend module. Perhaps it will run at a high speed.
For example, the result of executing this command on HEAD of mojo;
$ time scan-prereqs-cpanfile real 0m20.386s user 0m20.132s sys 0m0.126s $ time scan-prereqs-cpanfile —fast real 0m1.174s user 0m1.074s sys 0m0.096s
Enjoy!
==
Perl::PrereqScanner::Liteをリリースしました.
https://github.com/moznion/Perl-PrereqScanner-Lite
https://metacpan.org/release/Perl-PrereqScanner-Lite
このモジュールはPerl::PrereqScannerの高速化版です.
Perl::PrereqScannerではtokenizerにPPIを使用していましたが,Perl::PrereqScanner::LiteはtokenizerとしてCompiler::Lexerを使うことに加え,Moose依存を排除する事により,30倍程度の高速化を実現しています *2.
現在はuse
とrequire
によって宣言されたモジュールに加えて,extra scannerとしてMoose
を利用するとMooseファミリーの持つextends
記法によって宣言されたモジュールを抜き出すことが出来ます.Version
というextra scannerを用いる事によってFoo::Bar->VERSION(1.0.0)
のようにして指定されたバージョンを抜き出すことも可能です.
その他のextra scannerが必要な場合は,scan()
というメソッドを持ったPerl::PrereqScanner::Lite::SCANNER_NAME
という名前のモジュールを書いて,add_extra_scanner('SCANNER_NAME')
という具合にextra scannerを登録してやると良いです.
試しに,という言い方もアレですが,Perl::PrereqScanner::LiteをApp::scan_prereqs_cpanfileに組み込んでみました.最新版だと,
$ scan-prereqs-cpanfile --fast
という風に--fast
オプションを付けてやる事でバックエンドがPerl::PrereqScanner::Liteとなり,高速に動作することが見込めます.おそらく体感出来るレベルで速さを知覚出来ると思います.
[追記]
mojoのHEADでコマンドを実行するとこんな感じになりました.
$ time scan-prereqs-cpanfile real 0m20.386s user 0m20.132s sys 0m0.126s $ time scan-prereqs-cpanfile —fast real 0m1.174s user 0m1.074s sys 0m0.096s
ぜひお試しくださいませ.不具合等ありましたら教えて頂けると嬉しいです.