Perl Hackers Hub

第46回 Perl 5.26で変わること(3)

この記事を読むのに必要な時間:およそ 5 分

サブルーチンシグネチャの高速化

Perl 5.20に鳴り物入りで導入されたサブルーチンシグネチャですが,当初の実装は残念ながら従来の書き方に比べてかなり遅いものでした。試しに次のようなコードでベンチマークを取ってみます。

bench.pl

use 5.020;
use experimental "signatures";
use Benchmark qw/cmpthese/;

cmpthese(10000000, {
    no_signature => sub { no_sig(1, "value") },
    signature => sub { sig(1, "value") },
});

sub no_sig {
    my ($num, $str) = @_;
    return "$num $str";
}

sub sig ($num, $str) {
    return "$num $str";
}

Perl 5.20で実行すると,手もとの環境では従来のコードのほうが50%近く高速でした。

$ plenv local 5.20.0 && perl bench.pl
                  Rate    signature no_signature
signature    1261034/s           --         -35%
no_signature 1926782/s          53%           --

この傾向はPerl 5.22でも変わりません。

$ plenv local 5.22.0 && perl bench.pl
               Rate       signature no_signature
signature    1218027/s           --         -37%
no_signature 1945525/s          60%           --

Perl 5.24でも傾向は同じですが,このとき行われた最適化の結果,関数呼び出しが以前に比べて全体的に高速になっています。

$ plenv local 5.24.0 && perl bench.pl
                  Rate signature no_signature
signature    1461988/s        --         -32%
no_signature 2164502/s       48%           --

Perl 5.26ではこの差がかなり縮んでいます。

$ plenv local 5.26.0 && perl bench.pl
                  Rate    signature no_signature
signature    2020202/s           --          -6%
no_signature 2155172/s           7%           --

残念ながらまだ逆転とまではいきませんが,Perl 5.28ではさらに最適化が進むものと期待されています。

機能の廃止や削除の予定

Perlの原作者のLarry Wall氏がPerl 6の開発に専念するようになってからというもの,YAPCなどのカンファレンスではその年にリリースされたPerl 5の安定版や,現在まさに開発中の次期バージョンについての話はあっても,Perl 5は今後こうなっていく,という長期的な展望はあまり語られないのが常でした。

その現状は今も変わってはいませんが,特定機能の廃止や削除については,直近の安定版で廃止の手続きに入ったことを知らせる警告を出すよう修正したあと,問題が見つからなければ2つあとの安定版で削除する(エラーとして扱われるようになる)のが現在の開発ポリシーとなっています。そのため,廃止の手続きに入った時期がわかれば,いつ実際に消えるかが予想できます。

Perl 5.26では,ユーザーが中長期的な変更に備えられるよう,新たにperldeprecationという文書を用意して,この先数年でどのような機能が消えることになるかを明記するようになりました。現時点では3年後にリリースが予定されているPerl 5.32までの廃止,削除予定がまとめられています。

まとめ

Perl 5.26ではセキュリティ上の理由から@INCからカレントディレクトリが削除されるなど,スムーズな移行を妨げかねない修正がいくつか入っています。しばらくは古いPerlで様子見せざるを得ない場合もあるかと思いますが,現在のPerl 5は最新2つの安定版(本稿執筆時点においてはPerl 5.26とPerl 5.24)しかサポート対象としないことがポリシーとして明記されていますし,最近の傾向として(特に内部の整理や高速化の代償として)細かな機能の廃止や削除も続いています。実際に5.26を本番投入するかどうかはさておき,可能ならCIサービスなどを利用して,お手もとのモジュールやアプリケーションのテストが一通り通ることだけでも確認しておいていただければと思います。

さて,次回の執筆者は佐藤健太さんで,テーマは「Anikiで学ぶ実践的なO/Rマッパの作り方」です。お楽しみに。

WEB+DB PRESS

本誌最新号をチェック!
WEB+DB PRESS Vol.113

2019年10月24日発売
B5判/160ページ
定価(本体1,480円+税)
ISBN978-4-297-10905-9

  • 特集1
    接続エラー,性能低下,権限エラー,クラウド障害
    AWSトラブル解決
    原因調査・対応・予防のノウハウ
  • 特集2
    Ruby書き方ドリル
    要点解説と例題で身に付く!
  • 特集3
    体験
    ドメイン駆動設計
    モデリングから実装までを一気に制覇
  • 一般記事
    FigmaによるUIデザイン
    デザイナーとエンジニアがオンラインで協業できる!
  • 一般記事
    入門
    SwooleによるPHP非同期処理
    高速化のための並列実行はどのように書くのか

著者プロフィール

石垣憲一(いしがきけんいち)

翻訳家兼プログラマ。歴史ネタ担当。最近は主にCPANツールチェーン界隈の片隅で活動中。

URL:http://d.hatena.ne.jp/charsbar/