Slide 1

Slide 1 text

2019年冬のPerl Kenichi Ishigaki @charsbar YAPC::Tokyo 2019 Jan 26, 2019

Slide 2

Slide 2 text

me 2016年のPerl@LLoT Perl in 2016@YAPC::Hokkaido 2017年春のPerl@YAPC::Kansai 2017年夏のPerl@YAPC::Fukuoka (萬國之津梁@YAPC::Okinawa) (2018年初夏のPerl5)@Hokkaido.pm #14 2018年夏のPerl5@Shibuya.pm #18 2018年残暑のPerl@LL2018 2019年冬のPerl@YAPC::Tokyo <- イマココ

Slide 3

Slide 3 text

Perl 5.28のおさらい おもな変更点はperldelta参照 https://metacpan.org/pod/release/XSAWYERX/perl-5.28.0/pod/perldelta.pod http://perldoc.jp/docs/perl/5.28.0/perl5280delta.pod

Slide 4

Slide 4 text

異なる種類のハンドルの 共有はエラーに # 5.26まで open my $h, '<', 'foo.txt'; opendir $h, 'bar/'; say <$h>; # foo.txtの中身を出力 say readdir $h; # barディレクトリ配下のファイル一覧を出力 # 5.28 Cannot open $h as a dirhandle: it is already open as a filehandle

Slide 5

Slide 5 text

ヒアドキュメントの終端は 省略不可に ヒアドキュメントには明示的に終端を指定してください # 5.28 print <<''; # OK Empty string terminator is valid. print <<""; # OK Empty $string terminator is also valid. print <<; # NG This has long been deprecated since 5.000. Use of bare << to mean <<"" is forbidden

Slide 6

Slide 6 text

文字列用のビット演算子 # 5.26まで use utf8; say "生" & "死"; # 愛 5.22で実験的に導入された文字列用の ビット演算子が正式化 # 5.28 use utf8; say "生" & "死"; # 0 say "生" &. "死"; # 愛 # 数値判定ハックの一部 say length("" & "0"); # 1 say length("" &. "0"); # 0 no if $] >= 5.022, "feature", "bitwise"; say "生" & "死"; # 愛

Slide 7

Slide 7 text

perl -i がより安全に...? • 従来は処理の開始時にファイルを置換していた のでエラーが出るとファイルが壊れることも • 置き換えのタイミングが処理完了後になったので、 元のファイルは壊れにくく • 処理中にディレクトリが変わったりするとおかしな ことになる場合も • ファイルディスクリプタ枯渇問題(5.28.1で修正) • 暗黙のループが含まれない場合の不具合 (5.28.2で修正予定)

Slide 8

Slide 8 text

正規表現中の { の扱い autoconf の件で例外を作ってしまったことも あって、一部の { についてはエラーでなく deprecated の状態に差し戻しに # 5.26ではエラー、5.28では警告 $foo =~ /something{}/; $foo =~ /¥${foo}/; $foo =~ /¥${[^¥}]*}/; # 5.26でも警告 $foo =~ /$hashlike{}/; # 5.28から警告、5.32でエラーになる予定 $foo =~ /({1})/; $foo =~ /¥({1}¥)/; # これはOK

Slide 9

Slide 9 text

サブルーチンシグネチャの 再修正 :lvalueの場合に問題が発生することが発覚 したため、シグネチャとアトリビュートの並び 順が再度変更になっています sub f :lvalue ($a, $b) { ... }; # 5.20 sub f ($a, $b) :lvalue { ... }; # 5.22~5.26 sub f :lvalue ($a, $b) { ... }; # 5.28~ cf. Catalystのコントローラ sub index :Path :Args(0) { ... }

Slide 10

Slide 10 text

Babble (App::sigfix) • mst作 • サブルーチンシグネチャの新旧切り替 えコードを一般化 • JavaScriptのBabelインスパイア • もともとはRSSアグリゲータの名前空間 • コードの置換にはPPRを利用 • .pmcによる新旧両用対応も

Slide 11

Slide 11 text

Babble (App::sigfix) .pmcの中身はこんな感じ BEGIN { my %options; $options{'signatures'} = ... <<'CODE_FOR_SIGNATURES'; sub f :lvalue ($a, $b) { ... }; # 5.28用のコード CODE_FOR_SIGNATURES ... my $chosen = ($] >= 5.020 and $] < 5.022) or $] >= 5.028 ? 'signatures' : $] >= 5.022 and $] < 5.028 ? 'oldsignatures' : 'plain'; require Filter::Util::Call; Filter::Util::Call::filter_add(sub { Filter::Util::Call::filter_del(); 1 while Filter::Util::Call::filter_read(); $_ = $options{$chosen}; }); } 0; # should never get here

Slide 12

Slide 12 text

セキュリティフィックス • 5.26/5.28ともにいくつかの問題が報告さ れているので、可能なら最新版に • CPANモジュールについてはCPAN::Audit が問題をまとめてくれています • CPANTSでは影響がある モジュールに警告を 表示するように

Slide 13

Slide 13 text

5.30で予定されている変更

Slide 14

Slide 14 text

5.30で予定されている変更 エラーになるもの • 正規表現中の一部の { # ほとんどのものは警告のまま • grapheme以外のデリミタ • $* (複数行マッチ指定) と $# (数値フォーマット) • $[ (配列の添字最小値) の非ゼロ 指定 • my $foo if 0; (state変数の代用) • :utf8ハンドルに対する sysread/syswrite • File::Glob::glob • dump → Core::dump • 多尐のパフォーマンス改善 • Unicode 11 • /.{m,n}/の上限(n)が倍増 • UTF8関連のAPIがいくつか廃止に • セキュリティフィックス1件 1枚におさまるくらい尐ないです

Slide 15

Slide 15 text

今後のリリーススケジュール • 2019-02-20 5.29.8 Contentious changes freeze • 2019-03-20 5.29.9 User-visible changes to correctly functioning programs freeze • 2019-04-20 5.29.10 Full code freeze • 2019-05-20 5.30.0 Stable release! https://metacpan.org/source/ABIGAIL/perl-5.29.7/Porting/release_schedule.pod

Slide 16

Slide 16 text

さまざまな指標の悪化 0 2000 4000 6000 8000 10000 12000 14000 5.8-5.10 5.10-5.12 5.12-5.14 5.14-5.16 5.16-5.18 5.18-5.20 5.20-5.22 5.22-5.24 5.24-5.26 5.26-5.28 5.28-5.29.7 git log --oneline --no-merges | wc -l commits commits (*.[ch]) 0 5 10 15 20 25 30 35 40 5.8-5.10 5.10-5.12 5.12-5.14 5.14-5.16 5.16-5.18 5.18-5.20 5.20-5.22 5.22-5.24 5.24-5.26 5.26-5.28 5.28-5.29.7 git shortlog -sc --no-merges | wc -l commiters commiters (*.[ch]) 0 50 100 150 200 250 300 350 400 450 5.8-5.10 5.10-5.12 5.12-5.14 5.14-5.16 5.16-5.18 5.18-5.20 5.20-5.22 5.22-5.24 5.24-5.26 5.26-5.28 5.28-5.29.7 git shortlog -s --no-merges | wc -l authors authors (*.[ch])

Slide 17

Slide 17 text

OSX Mojave問題 • ExtUtils::MakeMaker等にApple独自のパッチ https://opensource.apple.com/source/perl/perl- 113.200.7/5.18/fix/perl_inc.diff.auto.html https://rt.cpan.org/Ticket/Display.html?id=127028 • XSモジュールのインストールなどがこけるとの報告 • 当面はsystem perlを使わないのが吉 • plenvも一度 ~/.plenv/build のキャッシュを消し てperlを作り直す必要がある模様

Slide 18

Slide 18 text

PerlはCPANの 実行環境だから…

Slide 19

Slide 19 text

CPANの指標も着実に悪化中 0 2000 4000 6000 8000 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 CPAN uploads total new 0 200 400 600 800 1000 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 CPAN uploads (JP) total new 0 500 1000 1500 2000 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 CPAN uploaders total new 0 50 100 150 200 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 CPAN uploaders (JP) total new

Slide 20

Slide 20 text

no dot in @INCの爪痕 • RTに登録されているチケット 500件弱 • 未対応のもの 300件強 • 現状ではインストール可能ですが…

Slide 21

Slide 21 text

CPAN Pull Request Challenge終了 4 years of CPAN Pull Request Challenge http://neilb.org/2018/11/13/last-month-of-prc.html

Slide 22

Slide 22 text

いくつかのサービスの終了・停滞 • http://search.cpan.org/ (→metacpan) • http://grep.cpan.me/ (502) • http://perldoc.perl.org/ (5.26.1どまり) 人のことは言えない… • https://acme.cpanauthors.org/

Slide 23

Slide 23 text

尐しは明るい話題も

Slide 24

Slide 24 text

grep.cpanauthors.org • LPW 2018駆動開発 • CPAN全文検索 • Perl 5/6両対応 • Groongaベース

Slide 25

Slide 25 text

Mojolicious 8 • Mojoconf (2018年9月) • Mojo::URLのパラメータ合成に非互換あり • Advent Calendar https://mojolicious.io/blog/ • Mojo::AsyncAwait • OpenAPI 3.0対応(実験的) • PAUSEやbugzilla.mozilla.orgの移行 https://dylan.hardison.net/2018/10/02/happy-bmo-push-day- mojolicious-edition/

Slide 26

Slide 26 text

JSON::XS 4.0 アドベントカレンダーに記事を書きました http://d.hatena.ne.jp/charsbar/20181207/1544189920 • allow_nonrefがデフォルトで有効に • JSON/JSON::PPも変化に追随 (Cpanel::JSON::XSはまだ) • boolean_values Data::MessagePack等の対応に期待

Slide 27

Slide 27 text

Perl::LanguageServer NOTE: This module uses Compiler::Lexer. The version on cpan (0.22) is buggy crashes from time to time. Please use the version from github (https://github.com/goccy/p5- Compiler-Lexer) until a new version is published to cpan. https://metacpan.org/pod/Perl::LanguageServer

Slide 28

Slide 28 text

メンテがしんどくなったら コメンテナを • CPAN river 3000などでもちらほら見知った お名前が • ADOPTME/HANDOFF/NEEDHELP • 作者と完全に連絡がつかなくなったモジュー ルの引き継ぎは[email protected]へ • ディストリビューション単位の権限移譲等は 今春対応予定

Slide 29

Slide 29 text

2019年冬のPerl6

Slide 30

Slide 30 text

Perl 6.dがリリースされました • 3年振りのバージョンアップ • d = Diwali (ヒンドゥー教の祭) • 例によって6.dは公式テスト(ROAST) のバージョンです • 実装としてはRakudoの2018年11月版 から

Slide 31

Slide 31 text

6.dで変わること • 実はあまり多くないです • 6.cの仕様と衝突しない 機能は6.cに追加済み • 大きな変更としてawait がスレッドをブロックしな いように • 廃止になった機能もいく つか

Slide 32

Slide 32 text

余裕がなければバージョン固定で use v6.c; # v6.c以上ではなくv6.c固定 my num $x; say $x; # NaN (v6.dでは0e0) use v6.d; # 1文目ではないのでエラー ...

Slide 33

Slide 33 text

新機能一覧はROASTの リポジトリに • 三年分なのでかなり分量がありますが… https://github.com/perl6/roast/blob/master/docs/announce/6.d.md • PDF版もあります https://marketing.perl6.org/id/1541379592/pdf_digital

Slide 34

Slide 34 text

Raku? 駱? 楽? 落? • 芸名 • 本名と一緒に使うのは どうなのか • 名前重要――ではなく https://p6weekly.wordpress.com/2018/11/ 12/2018-45-46-post-diwali/

Slide 35

Slide 35 text

開発の状況 2018年のチケットの推移 • 年初の未解決チケット数 1708 • 年末の未解決チケット数 2202 • 触れたチケット数 1563 • 解決済 752 • 要テスト 62 • 情報更新 119 • 新規チケット合計 1254 https://github.com/rakudo/rakudo/wiki/Ticket-updates

Slide 36

Slide 36 text

Squashathon https://github.com/rakudo/rakudo/wiki/Monthly-Bug-Squash-Day

Slide 37

Slide 37 text

パフォーマンスも順調に 改善中 • ケースによってはPerl5よりも高速に なっているものも • Jonathan Worthington氏への助成 金も延長(ただし残高の都合で半額 に…)

Slide 38

Slide 38 text

Perl 6 performance analysis tooling 既存のプロファイラを改善してより見やすく https://wakelift.de/2018/08/15/the-first-public-release/ https://wakelift.de/2019/01/20/these-graphs-are-on-fire/

Slide 39

Slide 39 text

nqp::fork() • fork()の有無はPerl 5とPerl 6の大きな違い のひとつでした • threadとfork()は基本相容れないのですが… • 一度(Perl6が管理している)threadを全部 joinしてからforkすることで解決 • ユーザが自前でthreadを作っているときは×

Slide 40

Slide 40 text

Rakudo.js • ついにmasterにマージされました • 主戦場はnode.jsからブラウザへと

Slide 41

Slide 41 text

6pad ブラウザ上でPerl 6を実行できます https://perl6.github.io/6pad/

Slide 42

Slide 42 text

p6env https://github.com/skaji/p6env • コアなハッカー以外はRakudo Starをインストールするのが吉 • とはいうものの、あると何かと便利

Slide 43

Slide 43 text

Comma IDE • Perl 6専用のIDE • 現在はサポーター用の有料ベータ版のみ • 将来的には無料版も(2019年Q1予定)

Slide 44

Slide 44 text

App::Perl6LangServer • もちろんPerl 6版も出ています • Atom IDEにも対応 (ide-perl6)

Slide 45

Slide 45 text

2019年の開発予定 • MoreVMの最適化(部分的なエスケープ解析) • 高速化(起動時間、コンパイル) • 並行・並列処理をより安全に • Cro 1.0 https://6guts.wordpress.com/2019/01/02/my-perl-6-wishes-for-2019/

Slide 46

Slide 46 text

Learning Perl 6 • brian d foy氏が Kickstarterで初期 資金調達 • 2018年8月に無事 出版されました

Slide 47

Slide 47 text

2019年のPerl関連イベント • German Perl Workshop 2019 (3/6~8, Munich, Germany) http://act.yapc.eu/gpw2019/ • Perl Toolchain Summit (4月予定) • The Perl Conference 2019 (6/16~21, Pittsburgh, USA) https://perlconference.us/tpc-2019-pit/ • PerlCon 2019 (8/7~9, Riga, Latvia) https://perlcon.eu/

Slide 48

Slide 48 text

Thank you