約25年ぶりのメジャーバージョンアップ「Perl 7」が発表される、Perl 5への下位互換性は維持
by Darren Wood
2020年6月24日に開催された「The Perl Conference in the Cloud」にて、スクリプト言語「Perl」の新バージョンである「Perl 7」が発表されました。Perl 7はPerl 5を現代化したものであり、コードベースに大きな変更はありません。
Announcing Perl 7
https://www.perl.com/article/announcing-perl-7/
Perl 7はPerl 5.32とほぼ同じものになる予定ですが、より現代的になっているとのこと。すでに以前のバージョンで有効化されているものはほとんどがそのまま利用できます。Perl 5の新バージョンではなくPerl 7へバージョンを改めた理由は「これまでのやり方と将来的にできることのの境界線を設定するためだ」と、Perl関連の書籍を著しているブライアン・ド・フォイ氏は語っています。また、Perl 6ではなくPerl 7にバージョンアップした理由については、当初Perl 6として開発が進められていたRakuとの混合を避けるためとのこと。こうしたバージョンアップはPHP 5からPHP 7へのバージョンアップなどの事例があります。
フォイ氏は「Perlは『自分が意図したことを行う』言語であり、Perl 4やPerl 5の初期の頃は、それは簡単に行うことができました。しかし、ここ数十年で世界はより複雑になりました」と指摘。Perlには新しいプラグマが追加され続けていたものの、Perlの下位互換性への取り組みにより、デフォルトの設定を変更することができなかったとのこと。現在のPerlは、何かを始める前にたくさんの前提となるコードを記述しなければならず、昔のC言語の時代と同じような状況であると語っています。
こうした状況の改善は、Perl 5のマイナーアップデートにおいても垣間見ることができます。バージョン5.12では、最小バージョンを指定することで「strict」を使う必要がなくなりました。
Perl 7では、バージョンを指定しなくてもこうした記述をデフォルトに設定可能。Perl 5には Perl 5の極端な下位互換性が残っていますが、Perl 7は下位互換性維持のための影響を最小限に抑えて現代的な動作を実現しています。
Perl 7に対する作業は現在進行中ですが、最初のリリース候補が出てくるまでの約半年間は気にする必要はないとフォイ氏。Perl 7のリリース目標は来年で、その間にいくつかのリリース候補が出てくるとのこと。Perl 7はほとんどバージョン5.32と同じで、大きな書き換えや新機能はありませんが、いくつかの実験的な機能が実装されるかもしれないそうです。なお、Perl 5は長期メンテナンスモードに入り、最大10年間はサポートされることになるだろうとフォイ氏は語っています。
Perlのライブラリやモジュールなどを集めたCPANには、20万近くのモジュールがあります。CPAN上にありメンテナンスされているモジュールはPerl 7でも動くはずで、それ以外の場合でも互換性モードが用意されているとのこと。Perlのコミュニティである「perl5-porters」は、新しいバージョンをCPANのほとんどすべてのソフトウェアに対してテストしおり、Perlの変更がコミュニティに与える影響をチェックするためのツールの長い歴史があるとフォイ氏。フォイ氏はモジュールの作者でもあり、以前からCPANコミュニティに貢献しているAndreas Koenig氏やSlaven Rezić氏など、さまざまな人から自身のモジュールが新しいPerlで動作しなくなるかもしれないという旨のメッセージをよく受け取っているとのこと。修正が必要ではあるものの、Perl 7のコードベースはほとんどPerl 5と同じなので、それほど大変な作業ではないはずだとフォイ氏は語っています。
by Per Henrik Johansen
Perl 7のための個別のCPANが用意される可能性もありえますが、Perl 7の開発者は既に動作しているものをやり直したくないと思っており、可能な限り少ない作業で管理しやすいものになるはずだとフォイ氏。また、PAUSE(Perl Authors Upload Server)は、ここ数年でコミュニティから多くの愛を受けているため、将来のニーズに対応しやすくなっており、PAUSEに関わる経験豊富で才能がある人たちが、コードベースをより扱いやすいものにしてくれたとフォイ氏は語っています。
Perlの開発者であるSawyer X氏は、Perlユーザーを「コードを変更しない人」「新しい機能を使う人」「ゼロから始める人」の3つに分類しており、Perl 5の極端な下位互換性は驚くほど成功しているものの、コードを更新しない人にしか役に立っていない点を指摘。Perl 7の新機能はプログラムに記述されていた長い定型文や、初心者は「なぜプログラムを作るためだけにこんなに多くのことを盛り込まなければならないのか」という初心者の疑問に対処しています。
Perl 7で無効になっている機能は以下。これらの機能は有効にすることもできます。
・間接オブジェクト記法
・barewordによるファイルハンドル(標準ファイルハンドルを除く)
・疑似的な多次元配列と多次元ハッシュ
・Perl 4形式のプロトタイプ宣言(代替は「:prototype()」)
Perl 7で新しく有効になっている機能はPostfix参照、新しいisa演算子などがあり、Perl 5.32の機能も含め、デフォルトではすべての機能が有効になっています。もしbarewordによるファイルハンドルや間接オブジェクト記法などを利用している場合は、変換を行うべきですが、それができないやっかいなコードでもPerl 5からPerl 7への移行を支援する互換モードが用意されています。
また、Perl 7でデフォルトで無効になっている機能はバージョン5.32でも無効にできるので、問題なくPerl 7に移行できるか確かめることができます。
・関連記事
プログラミング言語別に見るプログラマーの給与や人気ランキングなど世界のプログラマーを対象にした調査結果が公開中 - GIGAZINE
Linuxの次期カーネル「Linux 5.6」にはUSB4やNVIDIA RTX 20シリーズのサポートなど多数の新機能が搭載される - GIGAZINE
PHP 8のアップデートで加わる新機能一覧 - GIGAZINE
ウェブアプリ開発で使えるUIフレームワークのコンポーネントをまとめて確認できる「Open UI」 - GIGAZINE
・関連コンテンツ