perl_2019_winter

 perl_2019_winter

YAPC::Tokyo 2019

A1035a2db5b72227a14e84d65117b75b?s=128

Kenichi Ishigaki

January 26, 2019
Tweet

Transcript

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

  2. 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 <- イマココ
  3. 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

  4. 異なる種類のハンドルの 共有はエラーに # 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
  5. ヒアドキュメントの終端は 省略不可に ヒアドキュメントには明示的に終端を指定してください # 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
  6. 文字列用のビット演算子 # 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 "生" & "死"; # 愛
  7. perl -i がより安全に...? • 従来は処理の開始時にファイルを置換していた のでエラーが出るとファイルが壊れることも • 置き換えのタイミングが処理完了後になったので、 元のファイルは壊れにくく •

    処理中にディレクトリが変わったりするとおかしな ことになる場合も • ファイルディスクリプタ枯渇問題(5.28.1で修正) • 暗黙のループが含まれない場合の不具合 (5.28.2で修正予定)
  8. 正規表現中の { の扱い autoconf の件で例外を作ってしまったことも あって、一部の { についてはエラーでなく deprecated の状態に差し戻しに

    # 5.26ではエラー、5.28では警告 $foo =~ /something{}/; $foo =~ /¥${foo}/; $foo =~ /¥${[^¥}]*}/; # 5.26でも警告 $foo =~ /$hashlike{}/; # 5.28から警告、5.32でエラーになる予定 $foo =~ /({1})/; $foo =~ /¥({1}¥)/; # これはOK
  9. サブルーチンシグネチャの 再修正 :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) { ... }
  10. Babble (App::sigfix) • mst作 • サブルーチンシグネチャの新旧切り替 えコードを一般化 • JavaScriptのBabelインスパイア •

    もともとはRSSアグリゲータの名前空間 • コードの置換にはPPRを利用 • .pmcによる新旧両用対応も
  11. 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
  12. セキュリティフィックス • 5.26/5.28ともにいくつかの問題が報告さ れているので、可能なら最新版に • CPANモジュールについてはCPAN::Audit が問題をまとめてくれています • CPANTSでは影響がある モジュールに警告を

    表示するように
  13. 5.30で予定されている変更

  14. 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枚におさまるくらい尐ないです
  15. 今後のリリーススケジュール • 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
  16. さまざまな指標の悪化 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])
  17. 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を作り直す必要がある模様
  18. PerlはCPANの 実行環境だから…

  19. 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
  20. no dot in @INCの爪痕 • RTに登録されているチケット 500件弱 • 未対応のもの 300件強

    • 現状ではインストール可能ですが…
  21. CPAN Pull Request Challenge終了 4 years of CPAN Pull Request

    Challenge http://neilb.org/2018/11/13/last-month-of-prc.html
  22. いくつかのサービスの終了・停滞 • http://search.cpan.org/ (→metacpan) • http://grep.cpan.me/ (502) • http://perldoc.perl.org/ (5.26.1どまり)

    人のことは言えない… • https://acme.cpanauthors.org/
  23. 尐しは明るい話題も

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

    Groongaベース
  25. 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/
  26. JSON::XS 4.0 アドベントカレンダーに記事を書きました http://d.hatena.ne.jp/charsbar/20181207/1544189920 • allow_nonrefがデフォルトで有効に • JSON/JSON::PPも変化に追随 (Cpanel::JSON::XSはまだ) •

    boolean_values Data::MessagePack等の対応に期待
  27. 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
  28. メンテがしんどくなったら コメンテナを • CPAN river 3000などでもちらほら見知った お名前が • ADOPTME/HANDOFF/NEEDHELP •

    作者と完全に連絡がつかなくなったモジュー ルの引き継ぎはmodules@perl.orgへ • ディストリビューション単位の権限移譲等は 今春対応予定
  29. 2019年冬のPerl6

  30. Perl 6.dがリリースされました • 3年振りのバージョンアップ • d = Diwali (ヒンドゥー教の祭) •

    例によって6.dは公式テスト(ROAST) のバージョンです • 実装としてはRakudoの2018年11月版 から
  31. 6.dで変わること • 実はあまり多くないです • 6.cの仕様と衝突しない 機能は6.cに追加済み • 大きな変更としてawait がスレッドをブロックしな いように

    • 廃止になった機能もいく つか
  32. 余裕がなければバージョン固定で use v6.c; # v6.c以上ではなくv6.c固定 my num $x; say $x;

    # NaN (v6.dでは0e0) use v6.d; # 1文目ではないのでエラー ...
  33. 新機能一覧はROASTの リポジトリに • 三年分なのでかなり分量がありますが… https://github.com/perl6/roast/blob/master/docs/announce/6.d.md • PDF版もあります https://marketing.perl6.org/id/1541379592/pdf_digital

  34. Raku? 駱? 楽? 落? • 芸名 • 本名と一緒に使うのは どうなのか •

    名前重要――ではなく https://p6weekly.wordpress.com/2018/11/ 12/2018-45-46-post-diwali/
  35. 開発の状況 2018年のチケットの推移 • 年初の未解決チケット数 1708 • 年末の未解決チケット数 2202 • 触れたチケット数

    1563 • 解決済 752 • 要テスト 62 • 情報更新 119 • 新規チケット合計 1254 https://github.com/rakudo/rakudo/wiki/Ticket-updates
  36. Squashathon https://github.com/rakudo/rakudo/wiki/Monthly-Bug-Squash-Day

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

  38. 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/

  39. nqp::fork() • fork()の有無はPerl 5とPerl 6の大きな違い のひとつでした • threadとfork()は基本相容れないのですが… • 一度(Perl6が管理している)threadを全部

    joinしてからforkすることで解決 • ユーザが自前でthreadを作っているときは×
  40. Rakudo.js • ついにmasterにマージされました • 主戦場はnode.jsからブラウザへと

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

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

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

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

  45. 2019年の開発予定 • MoreVMの最適化(部分的なエスケープ解析) • 高速化(起動時間、コンパイル) • 並行・並列処理をより安全に • Cro 1.0

    https://6guts.wordpress.com/2019/01/02/my-perl-6-wishes-for-2019/
  46. Learning Perl 6 • brian d foy氏が Kickstarterで初期 資金調達 •

    2018年8月に無事 出版されました
  47. 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/
  48. Thank you