$30 off During Our Annual Pro Sale. View Details »

perl_2019_winter

 perl_2019_winter

YAPC::Tokyo 2019

Kenichi Ishigaki

January 26, 2019
Tweet

More Decks by Kenichi Ishigaki

Other Decks in Technology

Transcript

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

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

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

    もともとはRSSアグリゲータの名前空間 • コードの置換にはPPRを利用 • .pmcによる新旧両用対応も
  8. 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
  9. 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枚におさまるくらい尐ないです
  10. 今後のリリーススケジュール • 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
  11. さまざまな指標の悪化 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])
  12. 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
  13. CPAN Pull Request Challenge終了 4 years of CPAN Pull Request

    Challenge http://neilb.org/2018/11/13/last-month-of-prc.html
  14. 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/
  15. 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
  16. メンテがしんどくなったら コメンテナを • CPAN river 3000などでもちらほら見知った お名前が • ADOPTME/HANDOFF/NEEDHELP •

    作者と完全に連絡がつかなくなったモジュー ルの引き継ぎは[email protected]へ • ディストリビューション単位の権限移譲等は 今春対応予定
  17. Perl 6.dがリリースされました • 3年振りのバージョンアップ • d = Diwali (ヒンドゥー教の祭) •

    例によって6.dは公式テスト(ROAST) のバージョンです • 実装としてはRakudoの2018年11月版 から
  18. 余裕がなければバージョン固定で use v6.c; # v6.c以上ではなくv6.c固定 my num $x; say $x;

    # NaN (v6.dでは0e0) use v6.d; # 1文目ではないのでエラー ...
  19. Raku? 駱? 楽? 落? • 芸名 • 本名と一緒に使うのは どうなのか •

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

    1563 • 解決済 752 • 要テスト 62 • 情報更新 119 • 新規チケット合計 1254 https://github.com/rakudo/rakudo/wiki/Ticket-updates
  21. 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/