この広告は、90日以上更新していないブログに表示しています。
2015年6月1日に、最新バージョンのPerl 5.22がリリースされました。
今回のリリースでは、活発な機能追加が行われています。
Perl 5.22の一番うれしな点は、性能改善です。マルチデリファレンスの構文解析とメソッドの構文解析の改善によって、パフォーマンスがアップしています。
Perlの内部パーサーは、複数階層のデリファレンスを効率的に解析できるようになりました。このために、複数階層のデリファレンスのパフォーマンスが上昇しています。
$scores->[0]{math};
メソッド呼び出しと、SUPER擬似クラスは、事前に解析され、その情報がキャッシュされるようになっています。そのため、実行時の、メソッド呼び出しのパフォーマンスが上昇しています。
$obj->method$obj->SUPER::method;
length関数は、UTF-8ではない文字列に関して20%パフォーマンスがアップしています。
キーが、定数か、単純な変数だった場合に、配列とハッシュの要素へのアクセスが速くなっています。
PerlでC99でサポートされている数学関数を、POSIXモジュールを通じて利用できるようになりました。
atanhtgamma
InfとNaNがより堅固に利用できるようになりました。
16進の浮動小数点の解析が向上しました。また、16進で浮動少数点を記述するリテラルが追加されています。
0x1.23p-4
これで、Perlレベルで、マシンレベルと誤差のない数値を表現することが可能になっています。
このようにPerl 5.22では、数学関連の機能がかなり改善されています。
Perl 5.22では、正規表現の新しいフラグとして、通常の括弧をキャプチャに利用しないフラグが追加されました。これによって、複雑な正規表現を書くときに、キャプチャしない括弧「(?:)」を使わないで、簡潔に記述することができるようになりました。
"hello" =~/(hi|hello)/n
括弧を使っていますが、この括弧はキャプチャしません。nオプションを使った場合に、キャプチャをしたい場合は、次のようにします。
"hello" =~/(?-n:(hi|hello))/n;# $1 は "hello""hello" =~/(?<greet>hi|hello)/n;# $1 は "hello", $+{greet} も "hello"
複雑な正規表現を書くときは、nオプションと、名前つきキャプチャと組み合わせると見やすいのではないでしょうか。
Perlの機能としてエイリアスという機能が存在しているのですが、これが構文レベルで呼び出せるようになりました。この機能は実験的です。
useexperimental::refaliasing;my$nums = [1,2,3];my$nums_alias;\$nums_alias = \$nums;
constサブルーチン属性によって、定数関数がサポートされました。関数は一度実効されるとその値は保存され、2回目以降は、その値を利用します。この機能は実験的です。
my$value =sub: const{100 *100 };
より安全なダブルダイヤモンドオペレーター「<<>>」がサポートされました。従来のダイヤモンドオペレーターは、二引数のopen関数を内部的に利用していましたが、ダブルダイヤモンドオペレーターは、三引数のopen関数を利用します。
my$line = <<>>;
encodingモジュールは非推奨なモジュールですが、まだ生存期間中です。それで、機能の改善としてencodingを利用したときの影響の範囲が、グローバルなものから、レキシカルなものになっています。encodingモジュールを、ファイル単位などで、部分的に利用できるようになりました。
次の記述がエラーになりました。
defined(@array)defined(%hash)
この記述は5.6.1の時点で、廃止予定となっており、5.16で、廃止予定の警告が発せられるようになっていましたが、5.22で、エラーとなりました。Perlをバージョンアップするときは、古いソースコードには、この記述がある可能性がありますので、注意してください。
感想を述べると、まずPerlが数学関連の機能を強化したことに好感が持てます。Perlが遅れている分野をカバーする機能追加が行われたのは、うれしいことです。
また、メソッドと複数階層のデリファレンスのパフォーマンスがアップしたのは、とてもよいことだと思います。たとえば、PerlのWebフレームワークのMojoliciousでは、Perl5.22にバージョンアップすると、20%以上のパフォーマンスの改善があったということも、報告されていました。
また、うれしいのは、警告を致命的なエラーに変換することが非推奨になったことによって、「use warnings」が「use v5.xx」としたときに、加えることができる可能性の道が開けたことです。早めの方針転換が、後々の機能改善に利いてきますので。
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。