Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

2017年春のPerl

6.873 visualizaciones

Publicado el

YAPC::Kansai 2017

Publicado en: Tecnología

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?

×