19

Click here to load reader

perl language update

Embed Size (px)

Citation preview

Page 1: perl language update

Perl Language Update2016 年の Perl

Kenichi Ishigaki@charsbar

Lightweight Language of ThingsAug 27, 2016

Page 2: perl language update

Perl 6 の「クリスマス」ついに到来

Page 3: perl language update

ややこしいことを言うといろいろあるん

ですが…• 今回リリースされたのはあくまでも

v6.c 「クリスマス・バージョン」の公式テスト

• たまたまひとつの実装が特定の環境でその仕様を満たすようになっただけ

• 「クリスマス・バージョン」は「聖書」の一部には未対応

• 詳しくは別の機会に

Page 4: perl language update

Rakudo Perl6

• 本体は今も毎月リリースが続いています• 機能的には 2015 年 12 月にいったんフ

リーズ• 仕様を直すのではなく実装を直すフェー

ズに• 最適化や非同期処理のバグ取りなどに集

中• 9 月以降、互換性を崩さない範囲で少し

ずつ新機能が増えていく見込み

Page 5: perl language update

Rakudo の実行環境

• 現時点で v6.c に対応しているのは MoreVM のみ

• JVM 上では一部機能が欠けた状態• 長年 Perl 6 の土台となってきた

Parrot はついに完全引退• JavaScript バックエンドが本家に

Page 6: perl language update

Rakudo Star

• Rakudo 本体にモジュールなどを同梱

• こちらも四半期に一度くらいのペースでリリースが続いています

• Perl 6 自体を使って Perl 6 のテストを実行できるように

• http://rakudo.org/downloads/star/

Page 7: perl language update

Perl 5 の近況

Perl 6 の世界に比べると地味な変更が多いですが、もちろん更新は続いています

Page 8: perl language update

安定版 : Perl 5.24開発版 : Perl 5.25.4• サブルーチンやブロックの出入り

の高速化• 固定長文字列の正規表現の高速化• セキュリティ関係の修正など• 開発版 : Test2 モジュールへ移行

開始

Page 9: perl language update

Perl 5.14 で実験的に導入された

autoderef 機能は削除

Page 10: perl language update

伝統的な書き方$scalar = 'value';@array = ($value1, $value2, ...);%hash = ($key1, $value1, ...);

sigil の使い分けが…

Page 11: perl language update

リファレンスを使うとかなりの部分スカラーに一本化

できる

$scalar = 'value';$arrayref = [$value1, $value2, ...];$hashref = {$key, $value, ...};

Page 12: perl language update

場合によってはデリファレンスが必

要push @{$arrayref //= []}, $scalar;for (keys %$hashref) { ... }

Page 13: perl language update

5.14 では一部のキーワードがリファレンス引数に対応

push $arrayref //= [], $scalar;for (keys $hashref) { ... }

Page 14: perl language update

微妙な制約がありました

オブジェクトになっているかどうかだけで挙動が変わってしまう× push $blessed_arrayref, $scalar;× for (keys $blessed_hashref) { ... }

いつでもデリファレンスしてくれるわけではない× print "interpolates $arrayref";

Page 15: perl language update

5.20 で実験的に導入されたpostderef 機能が正式化

@{$arrayref} $arrayref->@*%{$hashref} $hashref->%*

Page 16: perl language update

伝統的な書き方と挙動は同じ

push $arrayref->@*, $scalar;push $blessed_arrayref->@*, $scalar;print "interpolates $arrayref->@*";

Page 17: perl language update

初期化が必要になる場合も

$undef->%* # 場所により警告の対象

%{$maybe_undef // {}}($maybe_undef // {})->%*× $maybe_undef->%* // {}

Page 18: perl language update

かっこの優先順位に注意

○ keys $maybe_hashref->%*× keys ($maybe_hashref // {})->%*○ keys (($maybe_hashref // {})->%*)

○ keys %{$maybe_hashref // {}}

Page 19: perl language update

YAPC::Hokkaido 2016

2016.12.10 Sat@ 札幌市産業振興センター

http://yapcjapan.org/2016hokkaido/