Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

2017年春のPerl

7.746 Aufrufe

Veröffentlicht am

YAPC::Kansai 2017

Veröffentlicht in: Technologie

2017年春のPerl

  1. 1. 2017 年春の Perl Kenichi Ishigaki @charsbar YAPC::Kansai 2017 Mar 4, 2017
  2. 2. 2017 年春の Perl 5
  3. 3. Perl 5.24.1 が ようやく出ました 2016-05-09 5.24.0 2016-07-17 5.24.1 RC1 2016-07-25 5.24.1 RC2 2016-08-11 5.24.1 RC3 2016-10-12 5.24.1 RC4 2017-01-02 5.24.1 RC5 2017-01-14 5.24.1
  4. 4. @INC の「 . 」問題 • 詳しくは後ほど • 5.24.1 では本体同梱のツール 類を修正 • base モジュールについては仕 切り直して 5.24.2 で対応 • ベンダによっては他のバージョ ンでもバックポートされている
  5. 5. Perl 6 への切り替え 機能が無効に $ cat > hello.sh #!/bin/sh echo "Hello, World"; $ perl hello.sh Hello, World $ cat > hello.pl #!/usr/bin/env perl -w print "Hello, Worldn"; $ perl hello.pl Hello, World $ cat > hello.sh #!/bin/sh echo "Hello, World"; $ perl hello.sh Hello, World $ cat > hello.pl #!/usr/bin/env perl -w print "Hello, Worldn"; $ perl hello.pl Hello, World $ cat > hello.p6 #!/home/ishigaki/.rakudobrew/bin/perl6 use v6; say "Hello, World"; $ perl5240 hello.p6 Hello, World $ perl5241 hello.p6 Perl v6.0.0 required--this is only v5.24.1, stopped at hello.p6 line 2. BEGIN failed--compilation aborted at hello.p6 line 2. $ cat > hello.p6 #!/home/ishigaki/.rakudobrew/bin/perl6 use v6; say "Hello, World"; $ perl5240 hello.p6 Hello, World $ perl5241 hello.p6 Perl v6.0.0 required--this is only v5.24.1, stopped at hello.p6 line 2. BEGIN failed--compilation aborted at hello.p6 line 2.
  6. 6. Perl 5.24 系の 主な変更点
  7. 7. 配列・ハッシュ操作関数の 自動デリファレンス機能は削 除5.14 で実験的に導入されたものの、制約も多かったため 5.24.0 で削除 push $arrayref //= [], $scalar; for (keys $hashref) { ... } push $arrayref //= [], $scalar; for (keys $hashref) { ... } × push $blessed_arrayref, $scalar; × for (keys $blessed_hashref) { ... } × print "interpolates $arrayref"; × push $blessed_arrayref, $scalar; × for (keys $blessed_hashref) { ... } × print "interpolates $arrayref";
  8. 8. 後置デリファレンス が正式機能に格上げ 5.20 で実験的に導入されたもの push $arrayref->@*, $scalar; push $blessed_arrayref->@*, $scalar; print "interpolates $arrayref->@*"; push $arrayref->@*, $scalar; push $blessed_arrayref->@*, $scalar; print "interpolates $arrayref->@*";
  9. 9. 優先順位には要注意 △ $undef->%* # 警告 × $maybe_undef->%* // {} ○ ($maybe_undef // {})->%* × keys ($maybe_hashref // {})->%* ○ keys (($maybe_hashref // {})->%*) ○ keys %{$maybe_hashref // {}} # shorter △ $undef->%* # 警告 × $maybe_undef->%* // {} ○ ($maybe_undef // {})->%* × keys ($maybe_hashref // {})->%* ○ keys (($maybe_hashref // {})->%*) ○ keys %{$maybe_hashref // {}} # shorter あらかじめ undef にならないよう値を入れておきましょう
  10. 10. Unicode 8.0 サポート plackup -MEncode -e 'use 5.024; sub {[ 200, ["Content-Type" => "text/plain"], [encode_utf8("N{TACO} N{POPCORN}")], ]}' plackup -MEncode -e 'use 5.024; sub {[ 200, ["Content-Type" => "text/plain"], [encode_utf8("N{TACO} N{POPCORN}")], ]}' http://emojione.com iOS 9.1 / OS X 10.11.1 / Android 6.0.1 などがすでにサポート済み
  11. 11. Unicode 8.0: 肌色修飾 子 plackup -MEncode -e 'use 5.024; sub {[ 200, ["Content-Type" => "text/plain"], [encode_utf8( "N{WOMAN}" . "N{EMOJI MODIFIER FITZPATRICK TYPE-5}" . " " . "N{MAN}" )], ]}' plackup -MEncode -e 'use 5.024; sub {[ 200, ["Content-Type" => "text/plain"], [encode_utf8( "N{WOMAN}" . "N{EMOJI MODIFIER FITZPATRICK TYPE-5}" . " " . "N{MAN}" )], ]}' http://emojione.com
  12. 12. 正規表現中の 「 C 」文字クラ スは削除文字列の内部表現を変更できたりするので 5.20 で廃止 my $c = "N{U+3042}"; # あ say unpack "H*", $c; # e38182 $c =~ /(.)/; say sprintf "%x", $1; # 3042 $c =~ /(C)/; say sprintf "%x", $1; # e3 $c =~ s/(CC)C/$1x84/; say $c; # い my $c = "N{U+3042}"; # あ say unpack "H*", $c; # e38182 $c =~ /(.)/; say sprintf "%x", $1; # 3042 $c =~ /(C)/; say sprintf "%x", $1; # e3 $c =~ s/(CC)C/$1x84/; say $c; # い
  13. 13. :utf8 レイヤ付きハンドルへの sysread()/syswrite() は廃止 これも同じく文字列境界を無視してしまうので use strict; use warnings; open my $fh, '<:encoding(cp932)', 'test.txt'; # こちらは正しく「文字単位」 read($fh, my $buf, 3); # こちらは「文字単位」にならないので警告 sysread($fh, my $buf, 3); use strict; use warnings; open my $fh, '<:encoding(cp932)', 'test.txt'; # こちらは正しく「文字単位」 read($fh, my $buf, 3); # こちらは「文字単位」にならないので警告 sysread($fh, my $buf, 3);
  14. 14. レキシカル $_ は 削除されました for my $_ (...) { ... }for my $_ (...) { ... } • given/when のために 5.10 で導入されたもの の、いろいろ混乱させたため 5.18 で実験的 機能に格下げされ、 5.24 で削除 • 詳しい経緯は perl5180delta 参照
  15. 15. 変数宣言はネスト不可に my ($x, my($y)); # エ ラー our (my $x); # 同じ く my ($x, my($y)); # エ ラー our (my $x); # 同じ く
  16. 16. chdir(undef) など の扱いが変更に ホームディレクトリには移動しないようになりました chdir($undef) or die "since 5.24" # 警告なし chdir($undef) or die "since 5.24" # 警告なし
  17. 17. パフォーマンスの改善 • スコープ(サブルーチン、ルー プ、ブロックなど)の出入りが かなり速くなりました • / 固定文字列 / のマッチもか なり速くなっています • 64 ビット対応以降遅くなって いた四則演算も多くの場合高速
  18. 18. セキュリティ対応 • 5.22 で一時ディレクトリ作成時に umask がおかしくなっていた件 • 5.005 時代から Win32 のボリュームラベル の扱いに問題があった件 • 5.20 以降 File::Spec の canonpath が外部 データの汚染情報が消えていた件 • Win32 の crypt() で条件によっては一般保 護違反が起こっていた件 • 環境変数に重複があった場合の挙動 もろもろ修正されています
  19. 19. version.pm の挙動が微妙に 変化 (0.9913 ~ ) https://twitter.com/syohex/status/821956819824148481 Lyon Compromise (2014) https://gist.github.com/dagolden/9559280
  20. 20. 詳しくは perldelta (perl5240delta) を 参照
  21. 21. Perl 5.24.2/3 で予 定されているもの • 5.24.2 は早ければ近日中にも リリースの見込み • base モジュールの「 . 」対応 • 5.24.3 では Time::HiRes の Sierra 対応などがバックポート される見込み
  22. 22. Perl 5.26 で予定 されているもの
  23. 23. 正規表現中の { の扱いが変更に 5.16 で廃止、 5.22 以降警告が出ていたのが死ぬように $foo =~ /d{1,10}/; # ok $foo =~ /d{1}/; # ok $foo =~ /something{}/; # 5.26 ではエ ラー $foo =~ /something{/; # 5.26 ではエ ラー $foo =~ /something[{]/; # ok $foo =~ /something{/; # ok $foo =~ /d{1,10}/; # ok $foo =~ /d{1}/; # ok $foo =~ /something{}/; # 5.26 ではエ ラー $foo =~ /something{/; # 5.26 ではエ ラー $foo =~ /something[{]/; # ok $foo =~ /something{/; # ok $foo =~ /{}/; # これも ok
  24. 24. レキシカルサブルーチン が正式化 5.18 で実験的に導入。詳しくは perldoc perlsub { sub whatever { my $x = shift; my sub inner { ... do something with $x ... } inner(); } } { sub whatever { my $x = shift; my sub inner { ... do something with $x ... } inner(); } }
  25. 25. ${^ENCODING} は削除 2015 年の YAPC で Yappo さんがおっしゃっていた通り × use encoding 'cp932'; ○ use encoding 'cp932', Filter => 1; × use encoding 'cp932'; ○ use encoding 'cp932', Filter => 1;
  26. 26. Unicode 9.0 サポート plackup -MEncode -e 'use 5.025003; sub {[ 200, ["Content-Type" => "text/plain"], [encode_utf8(join ' ', "N{FIRST PLACE MEDAL}", "N{TUMBLER GLASS}", "N{SNEEZING FACE}")], ]}' plackup -MEncode -e 'use 5.025003; sub {[ 200, ["Content-Type" => "text/plain"], [encode_utf8(join ' ', "N{FIRST PLACE MEDAL}", "N{TUMBLER GLASS}", "N{SNEEZING FACE}")], ]}' http://emojione.com
  27. 27. ヒアドキュメントが インデント可能に { my ($key, $value) = qw/foo bar/; my $json_template = << "END"; {"$key": "$value"} END } { my ($key, $value) = qw/foo bar/; my $json_template = <<~ "END"; {"$key": "$value"} END } { my ($key, $value) = qw/foo bar/; my $json_template = << "END"; {"$key": "$value"} END } { my ($key, $value) = qw/foo bar/; my $json_template = <<~ "END"; {"$key": "$value"} END }
  28. 28. @INC から「 . 」が消 える見込みです $ plenv install 5.25.10 -Ddefault_inc_excludes_dot$ plenv install 5.25.10 -Ddefault_inc_excludes_dot • いまのところはコンパイル時にフラグ必要 • セキュリティ問題なので断固実現とのこと • inc::Module::Install や、テスト中の t:: 、環境設定用 の do "localfile.pl" などを使っている方は要注意 • 環境変数 PERL_USE_UNSAFE_INC=1 を使えば一時的な 対応も可能 • 主要な CPAN インストーラなどには対応するパッチが 送られています • 迷ったら FindBin を使うか、絶対パス指定に
  29. 29. 詳しくは perl525[1-0]+delta を参照
  30. 30. ところで 2017 年 3 月 …といえば
  31. 31. CentOS 5 終了
  32. 32. さすがにそろそろ Perl 5.8 は … ? Debian 7.0 (wheezy; EOL 2018-05): 5.14.2 8.0 (jessie; EOL 2020-05): 5.20.2 Ubuntu 12.04 (precise; EOL 2017-04): 5.14.2 14.04 (trusty; EOL 2019-04): 5.18.2 16.04 (xenial; EOL 2021-04): 5.22.1 Fedora 24 (EOL -------): 5.22.2 25 (EOL -------): 5.24.0 RHEL/CentOS 5.11 (EOL 2017-03): 5.8.8 6.8 (EOL 2020-11): 5.10.1 7.3 (EOL 2024-06): 5.16.3 FreeBSD 10.3 (EOL 2018-04): 5.20.2 11.0 (EOL -------): 5.20.3 http://distrowatch.com/search.php? pkg=perl&relation=similar&pkgver=&distrorange=InAny#pkgsearch
  33. 33. …と思いきや Debian 7.0 (wheezy; EOL 2018-05): 5.14.2 8.0 (jessie; EOL 2020-05): 5.20.2 Ubuntu 12.04 (precise; EOL 2017-04): 5.14.2 14.04 (trusty; EOL 2019-04): 5.18.2 16.04 (xenial; EOL 2021-04): 5.22.1 Fedora 24 (EOL -------): 5.22.2 25 (EOL -------): 5.24.0 RHEL/CentOS 5.11 (ELS 2020-11): 5.8.8 6.8 (EOL 2020-11): 5.10.1 7.3 (EOL 2024-06): 5.16.3 FreeBSD 10.3 (EOL 2018-04): 5.20.2 11.0 (EOL -------): 5.20.3 Solaris 10 (EOL 2018-01): 5.8.4 11.3 (EOL 2031-11): 5.12.5
  34. 34. どのバージョンを 使えばいいのか ? • 互換性やセキュリティの問題に対応できるな ら、どれでもお好きなように • システムのはベンダが面倒を見てくれている はず • p5p のサポートは原則直近 2 バージョンのみ (perlpolicy) • いまなら 5.22 と 5.24 。夏までには 5.24 と 5.26 に
  35. 35. 開発が進められている中で動かな くなるものが出てきているのは本 当 • 有名どころでは jcode.pl が 5.22 以 降 defined(%hash) 問題で死ぬよう に • 5.22 からはコアから削除される モジュールもちょこちょこ出てき ました • Perl 5.25.9 からは将来の廃止予定 が文書の形で公開されています
  36. 36. なるべく互換性を壊さな い努力は行われています • BBC (Blead Breaks CPAN) : Perl のリ リースごとに全 CPAN モジュールのス モークテスト • 一般的な CPAN モジュールを使ってい る限り、サポートされているバージョ ンまで上げてもそれほど問題にはなら ないはず • Perl 5.22.3 では最新の Coro が入ります
  37. 37. 積極的な改善も 粛々と
  38. 38. FOSDEM ではサブルーチ ンシグネチャの高速化が 話題になっていました • 5.26 ではシグネチャがシグネチャ なしのコードと同じくらいの速度 に • 将来のバージョンではシグネチャ を使った方が速くなるようになる 予定 http://ftp.fau.de/fosdem/2017/K.4.201/perl5_future.mp4
  39. 39. もちろん高速化の やり方だってひと つではありません そもそも本当にボトルネックは Perl 本体なのか 、と
  40. 40. YAPC::Hokkaido では Rust で XS を書くというネタがありま した 見逃した方は YAPC::NA や YAPC::EU の録 画で https://www.youtube.com/watch?v=GwS8eDOYz_U https://www.youtube.com/watch?v=EZfm5rEnqBc CPAN には Rust と FFI で高速な拡張を用意するモジュールなども (FFI::Platypus::Lang::Rust)
  41. 41. RPerl のように特殊な方法で 高速化を図る例も • シンプルに書かれた Perl のソースコードを C+ + に変換することで高速化 • 対応している書き方はかなり限られているの で、恩恵を受けられないコードも多そうです …が • Perl Foundation から助成金を受けてドキュメ ント整備されました http://rperl.org https://metacpan.org/release/RPerl
  42. 42. 他の言語やツールに 処理を委譲する手も • なんでも自前で用意する必要はありませんよ ね • Inline::C とか、機械学習なら Inline::Python とか、必要なところだけ別言語で書く選択肢 もあります • Inline 系のモジュールを使わなくても、普通 は JSON や DB 経由でも十分でしょう • つなげないものがあったらつなげるようにし
  43. 43. 解決されるとうれしい問題が あったら、とりあえずサンプ ルを • もっといい実装が出てくる かも • コア側でフック先を用意し てもらえるかも ( キーワー ドプラグインやカスタム Op
  44. 44. Stevan Little 氏は新しい MOP システムなどを紹介 • UNIVERSAL::Object (Perl 5.6.0) • B::CompilerPhase::Hook • BEGIN::Lift • MOP (Perl 5.10.0) • Method::Traits (Perl 5.14.5) • Moxie (Perl 5.22) http://ftp.fau.de/fosdem/2017/K.4.201/damnit_stevan.mp4
  45. 45. package Point { use Moxie; extends 'Moxie::Object'; has '$!x' => sub { 0 }; has '$!y' => sub { 0 }; sub BUILDARGS : init_args( x => '$!x', y => '$!y', ); sub x : ro('$!x'); sub y : ro('$!y'); sub set_x : wo('$!x'); sub set_y : wo('$!y'); sub clear ($self) { @{ $self }{'$!x', '$!y'} = (0, 0); } sub pack ($self) { +{ x => $self->x, y => $self->y } } } package Point { use Moxie; extends 'Moxie::Object'; has '$!x' => sub { 0 }; has '$!y' => sub { 0 }; sub BUILDARGS : init_args( x => '$!x', y => '$!y', ); sub x : ro('$!x'); sub y : ro('$!y'); sub set_x : wo('$!x'); sub set_y : wo('$!y'); sub clear ($self) { @{ $self }{'$!x', '$!y'} = (0, 0); } sub pack ($self) { +{ x => $self->x, y => $self->y } } } https://github.com/stevan/p5-Moxie/blob/master/t/000-samples/001-point.t
  46. 46. 2017 年春の Perl 6
  47. 47. 約束された「クリスマ ス」から一年が経ちま した
  48. 48. 「ロースト」のお 味、試してみまし たか?• 巷ではよく雑に「 Perl 6 が出た」とい …う話がされますが • Perl 6 では実装と仕様が明確に分かれ ています • ラリーが「クリスマス」に持ってきて くれたのは「公式テスト (Repository Of All Spec Tests) 」のクリスマス・バー
  49. 49. $ perl6 -v This is Rakudo version 2017.02 built on MoarVM version 2017.02 implementing Perl 6.c. This is Rakudo version 2017.02 built on MoarVM version 2017.02 implementing Perl 6.c. • say $*PERL.version; # v6.c • say $*PERL.name; # Perl 6 • say $*PERL.compiler.version;   # v2017.02 • say $*PERL.compiler.name; # rakudo • say $*VM.version;     # v2017.02 • say $*VM.name; # moar • say $*PERL.version; # v6.c • say $*PERL.name; # Perl 6 • say $*PERL.compiler.version;   # v2017.02 • say $*PERL.compiler.name; # rakudo • say $*VM.version;     # v2017.02 • say $*VM.name; # moar use 文で制御できるのは v6.c の部分だけ
  50. 50. 最終的な目標をすべて達成できて いるわけではありません ROAST から切り出される各実装向けのテストにはいろい ろと分岐なども残っています given $*DISTRO.name { when "macosx" { #?rakudo.jvm skip "file system events NYI? RT #124828" subtest &macosx, "does watch-path work on Mac OS X"; } default { pass "Nothing reliable to test yet"; } } given $*DISTRO.name { when "macosx" { #?rakudo.jvm skip "file system events NYI? RT #124828" subtest &macosx, "does watch-path work on Mac OS X"; } default { pass "Nothing reliable to test yet"; } } perl6/roast/S17-supply/watch-path.t (for IO::Notification.watch-path)
  51. 51. テストされている機能につい てはそれなりに「安定」して いるはず • ROAST 6.c の README にも明記されています が、テストされていないものは「仕様」では ありません • 疑問に思ったら設計文書ではなく公式仕様テ ストをご確認ください
  52. 52. IOwesomeness IO まわりのインタフェースの統一・改善のため、近々既 存のアプリが壊れるかもしれない変更が入る見込みです • ただし、定義上公式テストでテストされていない機能 はすべて「実験的な機能」なので、本当に「 6.c 」が 壊れることになるかは不明 • 現時点でわかっている link() と seek() については 6.c ではテストされていません • 6.c 対応の既存アプリに重大な影響を及ぼしそうな変 更については 6.d に持ち越される可能性も 今後のスケジュール 2017 年 3 月 18 日:コアチーム内で仕様確定(その後ユーザ向け情報 公開) 2017 年 4 月 15 日:対応を完了させて Rakudo 2017.04 リリース予定
  53. 53. 開発はいまも活発 に続いています FOSDEM 時点での「クリスマス」以降のコミッ ト概数 : •MoarVM: 1000 •NQP: 1300 •Rakudo: 3300 •ドキュメント類 : 3200 ( 約 22 コミット / 日 ) http://ftp.fau.de/fosdem/2017/K.4.201/faaaaster.mp4
  54. 54. 2016 年は高速化と 信頼性の向上に注力 • Jonathan Worthington 氏が 200 時間 ( + 200 時間 ) の助成金を受けて低レベル部分を改善 • 2016 年 5 月時点で 52263 件の仕様テストに 254 秒かかっていたのが、 2017 年 2 月には 55871 件のテストが 166 秒に ( 約 1.5 倍の高 速化 ) • 2015 年 12 月に 14 秒かかっていた Text::CSV のテストは (1 箇所変更しただけで )2017 年 2
  55. 55. 2017 年には MoarVM の JIT 機能や grammar の高速化なども取り込 まれる見込みです
  56. 56. 新機能も少しずつ 増えてきています
  57. 57. TWEAK サブメソッ ドPerl 6 の BUILD は Moose の BUILDARGS 相当 use v6.c; class Foo { has ($.x, $!id); submethod BUILD() { $!id = $!x * 2; # $!x is not set yet } method generated_id { $!id } } say Foo.new(x => 1).generated_id; # 0 use v6.c; class Foo { has ($.x, $!id); submethod BUILD() { $!id = $!x * 2; # $!x is not set yet } method generated_id { $!id } } say Foo.new(x => 1).generated_id; # 0
  58. 58. TWEAK サブメソッ ド…こう書いてもよいのですが use v6.c; class Foo { has ($.x, $!id); submethod BUILD(:$x) { $!id = $x * 2; } method generated_id { $!id } } say Foo.new(x => 1).generated_id; # 2 use v6.c; class Foo { has ($.x, $!id); submethod BUILD(:$x) { $!id = $x * 2; } method generated_id { $!id } } say Foo.new(x => 1).generated_id; # 2
  59. 59. TWEAK サブメソッ ドMoose の BUILD 相当のものが新設されました use v6.c; # since 2016.11 (or v6.d when ready) class Foo { has ($.x, $!id); submethod TWEAK() { # called after BUILDs $!id = $!x * 2; } method generated_id { $!id } } say Foo.new(x => 1).generated_id; # 2 use v6.c; # since 2016.11 (or v6.d when ready) class Foo { has ($.x, $!id); submethod TWEAK() { # called after BUILDs $!id = $!x * 2; } method generated_id { $!id } } say Foo.new(x => 1).generated_id; # 2
  60. 60. モジュールの読み込みが レキシカルスコープに A.pm6 use A; class B {} use A; class B {} use B; A.new; # die since 2017.01 use B; A.new; # die since 2017.01 • これによってアプリ内 で複数バージョンの同 じモジュールを利用す ることができるように • Rakudo のバージョンを 上げてもモジュールの 再インストールは不要 • rakudobrew で切り替え るよりシステムにイン ストールしてしまう方 class A {}class A {} B.pm6 lexical_module_load.pl6
  61. 61. Unicode サポート say 「こんにちはこんにちは」 ; # 半角「 」 のみ my $ 税率 = 1.08; ($ 金額 ×$ 税率 ).say; say 100² ÷ ⅕; # 50000; say 100 ** 2 / unival("x[2155]"); say 「こんにちはこんにちは」 ; # 半角「 」 のみ my $ 税率 = 1.08; ($ 金額 ×$ 税率 ).say; say 100² ÷ ⅕; # 50000; say 100 ** 2 / unival("x[2155]");
  62. 62. Unicode サポート perl5 -E 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"' # 2 perl6 -e 'say "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]".chars' # 1 perl6 -e 'say "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]".codes' # 2 perl5 -E 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"' # 2 perl6 -e 'say "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]".chars' # 1 perl6 -e 'say "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]".codes' # 2 Perl 6 なら合字も正しく扱えます
  63. 63. 親切なエラーメッセー ジPerl 5 ユーザがやらかしがちなミスは実行 時に正しい書き方を教えてくれます perl5 -E 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"'perl5 -E 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"' perl6 -e 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"' # Unsupported use of N{CHARNAME}; in Perl 6 please use c[CHARNAME] perl6 -e 'say length "N{MAN}N{EMOJI MODIFIER FITZPATRICK TYPE-5}"' # Unsupported use of N{CHARNAME}; in Perl 6 please use c[CHARNAME] perl6 -e 'say length "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]"' # Undeclared routine: # length used at line 1. Did you mean 'elems', 'chars', 'graphs', 'codes'? perl6 -e 'say length "c[MAN]c[EMOJI MODIFIER FITZPATRICK TYPE-5]"' # Undeclared routine: # length used at line 1. Did you mean 'elems', 'chars', 'graphs', 'codes'?
  64. 64. 6.d.PREVIEW • Rakudo 2017.02 からは最初の 6.c 非互 換機能となる nonblocking await の実装 が入っています • 試す場合は use v6.d.PREVIEW; で https://github.com/perl6/roast/blob/master/S17-supply/syntax-nonblocking-await.t
  65. 65. MoarVM 以外のバッ クエンドについて • JVM: 6.d.PREVIEW で壊れた部分を修正 • JavaScript: say "Hello, World" に成功、 ROAST テストに通り始めている状況 http://blogs.perl.org/users/pawel_murias/2017/02/rakudojs-update---we- passed-a-first-roast-test.html • Rakudo 以外の古い実装用の分岐は公式 テストから削除されました https://github.com/perl6/roast/issues/235 • Parrot 関連コードは 2016.07 に削除
  66. 66. エコシステム https://modules.perl6.org/ •2017 年 3 月の時点で 780 くらい •最終更新が「クリスマス」以前のものは動かな いかも •困ったら Inline::Perl5 で CPAN のモジュールを 頼る手も http://niner.name/talks/Web%20development%20and%20Perl%206/Web %20development%20and%20Perl%206.pdf
  67. 67. Perl 6 のモジュールを書 く $ zef install App::Mi6 $ mi6 new Your::Great::Module $ zef install App::Mi6 $ mi6 new Your::Great::Module とりあえず何か書いてみたいという方は skaji さんの App::Mi6 を ネタが思いつかない方は「 Most Wanted Modules 」が参考になるはず https://github.com/perl6/perl6-most-wanted/blob/master/most- wanted/modules.md
  68. 68. これから学ぶなら 当面はググるよりも信頼できる情報源を頼るの が吉 •Perl 6 の各種アドベントカレンダー – https://perl6advent.wordpress.com/ roast/integration/ 以下のテストも参照 – http://qiita.com/advent-calendar/2016/perl6 – http://qiita.com/advent-calendar/2015/perl6 •Perl 6 入門 : http://ja.perl6intro.com •RosettaCode https://rosettacode.org/wiki/Category:Perl_6 •公式テスト •perl6.org
  69. 69. 6.c 対応の書籍も続々 と書かれています • Perl 6 at a Glance (Andrew Shitov; 2017.01.01) https://deeptext.media/perl6-at-a-glance/ • Think Perl 6 (Laurent Rosenfeld, Allen B. Downey; 2017.05.25) http://shop.oreilly.com/product/0636920065883.do • Learning Perl 6 (brian d foy) https://www.lerningperl6.com • Perl 6 By Example (Moritz Lenz) https://leanpub.com/perl6
  70. 70. その他の情報源 • Weekly changes in and around Perl 6 https://p6weekly.wordpress.com • https://twitter.com/perl6org • Youtube の Perl 6 関連ビデオ http://bit.ly/perl6_english_video • 次期バージョンについて – https://github.com/perl6/specs/blob/master/v6d.pod – https://github.com/rakudo/rakudo/blob/nom/docs/language_versions.md • WEB+DB PRESS Vol.93 「 Perl 6 の歩き方」 http://gihyo.jp/dev/serial/01/perl-hackers-hub/003901
  71. 71. 2017 年の主要海外 Perl 関連イベント • The Perl Conferences (YAPC) – 2017.06.18-23 (Alexandria, Virginia, USA) – 2017.08.09-11 (Amsterdam, Netherlands) • German Perl Workshop 2017 2017.03.08-12 (Nuremberg, Germany) • Perl Toolchain Summit 2017.05.11-14 (Lyon, France) • French Perl Workshop 2017.06.09-10 (Paris, France)
  72. 72. Questions?

×