$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. 2019年冬のPerl
    Kenichi Ishigaki
    @charsbar
    YAPC::Tokyo 2019
    Jan 26, 2019

    View Slide

  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 <- イマココ

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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 "生" & "死"; # 愛

    View Slide

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

    View Slide

  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

    View Slide

  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) { ... }

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  13. 5.30で予定されている変更

    View Slide

  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枚におさまるくらい尐ないです

    View Slide

  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

    View Slide

  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])

    View Slide

  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を作り直す必要がある模様

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  23. 尐しは明るい話題も

    View Slide

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

    View Slide

  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/

    View Slide

  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等の対応に期待

    View Slide

  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

    View Slide

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

    View Slide

  29. 2019年冬のPerl6

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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/

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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/

    View Slide

  48. Thank you

    View Slide