Perl Language Update2016 年の Perl
Kenichi Ishigaki@charsbar
Lightweight Language of ThingsAug 27, 2016
Perl 6 の「クリスマス」ついに到来
ややこしいことを言うといろいろあるん
ですが…• 今回リリースされたのはあくまでも
v6.c 「クリスマス・バージョン」の公式テスト
• たまたまひとつの実装が特定の環境でその仕様を満たすようになっただけ
• 「クリスマス・バージョン」は「聖書」の一部には未対応
• 詳しくは別の機会に
Rakudo Perl6
• 本体は今も毎月リリースが続いています• 機能的には 2015 年 12 月にいったんフ
リーズ• 仕様を直すのではなく実装を直すフェー
ズに• 最適化や非同期処理のバグ取りなどに集
中• 9 月以降、互換性を崩さない範囲で少し
ずつ新機能が増えていく見込み
Rakudo の実行環境
• 現時点で v6.c に対応しているのは MoreVM のみ
• JVM 上では一部機能が欠けた状態• 長年 Perl 6 の土台となってきた
Parrot はついに完全引退• JavaScript バックエンドが本家に
Rakudo Star
• Rakudo 本体にモジュールなどを同梱
• こちらも四半期に一度くらいのペースでリリースが続いています
• Perl 6 自体を使って Perl 6 のテストを実行できるように
• http://rakudo.org/downloads/star/
Perl 5 の近況
Perl 6 の世界に比べると地味な変更が多いですが、もちろん更新は続いています
安定版 : Perl 5.24開発版 : Perl 5.25.4• サブルーチンやブロックの出入り
の高速化• 固定長文字列の正規表現の高速化• セキュリティ関係の修正など• 開発版 : Test2 モジュールへ移行
開始
Perl 5.14 で実験的に導入された
autoderef 機能は削除
伝統的な書き方$scalar = 'value';@array = ($value1, $value2, ...);%hash = ($key1, $value1, ...);
sigil の使い分けが…
リファレンスを使うとかなりの部分スカラーに一本化
できる
$scalar = 'value';$arrayref = [$value1, $value2, ...];$hashref = {$key, $value, ...};
場合によってはデリファレンスが必
要push @{$arrayref //= []}, $scalar;for (keys %$hashref) { ... }
5.14 では一部のキーワードがリファレンス引数に対応
push $arrayref //= [], $scalar;for (keys $hashref) { ... }
微妙な制約がありました
オブジェクトになっているかどうかだけで挙動が変わってしまう× push $blessed_arrayref, $scalar;× for (keys $blessed_hashref) { ... }
いつでもデリファレンスしてくれるわけではない× print "interpolates $arrayref";
5.20 で実験的に導入されたpostderef 機能が正式化
@{$arrayref} $arrayref->@*%{$hashref} $hashref->%*
伝統的な書き方と挙動は同じ
push $arrayref->@*, $scalar;push $blessed_arrayref->@*, $scalar;print "interpolates $arrayref->@*";
初期化が必要になる場合も
$undef->%* # 場所により警告の対象
%{$maybe_undef // {}}($maybe_undef // {})->%*× $maybe_undef->%* // {}
かっこの優先順位に注意
○ keys $maybe_hashref->%*× keys ($maybe_hashref // {})->%*○ keys (($maybe_hashref // {})->%*)
○ keys %{$maybe_hashref // {}}
YAPC::Hokkaido 2016
2016.12.10 Sat@ 札幌市産業振興センター
http://yapcjapan.org/2016hokkaido/