RubyKaigi 2019の発表資料がだいぶ揃ったようです。ありがとうございます!
- 現時点のYouTube動画: RubyKaigi - YouTube
誤りや追加情報などがありましたら@hachi8833までお知らせください。
「最適化」
やはり最適化が最も多いですね。
- Day1セッション: Write a Ruby interpreter in Ruby for Ruby 3 - RubyKaigi 2019(@ko1)(見に行けず😇)
- Day1セッション: Determining Ruby Process Counts: Theory and Practice - RubyKaigi 2019(@nateberkopec)
- Day1セッション: Compacting GC for MRI v2 - RubyKaigi 2019(@tenderlove)(見に行けず😇)
- Day1セッション: A Bundle of Joy: Rewriting for Performance - RubyKaigi 2019(@_matthewd)(見に行けず😇)
- Day2セッション: Benchmarking your code, inside and out - RubyKaigi 2019(見に行けず😇)
- Day3セッション: Performance Optimization Techniques of MessagePack-Ruby - RubyKaigi 2019(@frsyuki)
- Day3セッション: The send-pop optimisation - RubyKaigi 2019(@shyouhei)(見に行けず😇)
- Day1セッション: Compiling Ruby to idiomatic code in static languages - RubyKaigi 2019(@alehander42)
- Day3セッション: Pre-evaluation in Ruby - RubyKaigi 2019(@kddeisz)
- Day3キーノート: Optimization Techniques Used by the Benchmark Winners - RubyKaigi 2019(@jeremyevans0)
残念ながら現地で見られませんでしたが、ko1さんの発表は「Cで書かれているRubyの組み込みメソッドのうち、単にCのライブラリを呼んでいる程度のものはRubyで書けるならRubyで書こう」という趣旨でした。RubyのFFI(foreign function interface)を用いて、RubyコードからCのコードを呼び出す形で組み込みメソッドを書き、それに応じてVMにinvokecfuncwparam
などのインストラクションを追加したことで、Cネイティブのメソッドより高速にできたというものです。上述のご本人のブログが最もわかりやすいと思います。
当日見られなかったセッションのうち、@shyouheiさんの「The send-pop optimisation」のスライドを見直しました。頻繁に実行されるpop
の呼び出し回数を減らすという、VMの内部に切り込む最適化でした。
オーラスのJeremy Evanさんのキーノートは、そのまま業務に使ったらやばそうなRubyコード最適化を怒涛の勢いで紹介していました。morimorihogeさんの所感は「すべてを理解しなくてもいいけど、パフォーマンスチューニングに慣れていない人が『こういう書き方は遅い臭いがする』という感覚を養うのにいいと思う」でした。
「mruby」「mruby/c」
- Day1セッション: Pathfinder - Building a Container Platform in Ruby Ecosystem - RubyKaigi 2019(@giosakti)(見に行けず😇)
- Day2セッション: Practical mruby/c firmware development with CRuby - RubyKaigi 2019(@hasumikin)(見に行けず😇)
- Day2セッション: intimate Chat with Matz and mruby developers about mruby - RubyKaigi 2019(@Hir0_IC)(見に行けず😇)
気がつけばmruby関連のセッションは見られずでした😢。しかもDay 2夜にmrubyのワークショップ(先着50名様)↓が開催されていたことも今になって気づきました。
遅ればせながら、最近ゆっくりゆっくりmrubyの構成を追っています。mrubyのコンパイラがmrbgemsの形式になっていてなぜ?と思っているレベルです。mrubyのparser.yは7000行とRubyよりは小さいものの、コードがぎっしりでビビりました。
「ブランチメンテナンス」
- Day2セッション: All bugfixes are incompatibilities - RubyKaigi 2019(nagachika)
安定版ブランチメンテナーの@nagachikaさんが、バグフィックスをバックポートするかどうかをジャッジすることの難しさについて発表しました。原則は「バグフィックスはバックポートする」「パフォーマンス改善や新機能や仕様変更はバックポートしない」なのですが、きれいにトリアージできるとは限らずに悩んだり、ときにはバックポートすべきでないものをバックポートしてしまったりというさまざまな経験談に、ブランチメンテナーにのしかかるプレッシャーを実感しました。「個人的にはエッジを効かせたいけど、安定したRubyを届けたい」という言葉が思い出されます。
- メモリ探索の修正はメモリ違反が発生しやすい
- Refinementの細かい仕様が定まっていない部分が改修の影響を受けることも
- シンタックスエラーはモンキーパッチでは修正できない(当然ですが)
- parser.yは魔境
- ずっと前からあるシンタックスエラーは、無理に直すより優先順位を下げて既知のバグにする方がよいことも
- テストですべてのエラーをカバーするのは難しい
RubyKaigi 2019 Keynote レポート「nagachikaさん「安定したRubyを届けたい –All bugfixes are incompatibilities–」 〜RubyKaigi 2019 2日目 基調講演」公開 https://t.co/JkrjT3mD7r
— gihyo.jp (@gihyojp) May 15, 2019
「モナド」「パターンマッチング」
- Day1セッション: Pragmatic Monadic Programing in Ruby - RubyKaigi 2019(@joker1007)(見に行けず😇)
- Day1セッション Pattern matching - New feature in Ruby 2.7 - RubyKaigi 2019(見に行けず😇)
少々無理やりですが、@joker1007さんのモナドパターン話と、@joker1007さんを含め多くの人が期待を寄せているパターンマッチングをここに置きました。モナドむずい...
パターンマッチングのスライドを見返すと、特にJSONのようなネストしたパターンをそのままin
で扱えるあたりがスゴいと思いました。今までなかったのが不思議な機能ですね。
参考: Ruby 2.7 — Pattern Matching — First Impressions – Brandon Weaver – Medium
参考: Ruby 2.7 — Pattern Matching — Destructuring on Point
「デバッグ」「監視」「クリーンアップ」「テスト」
- Day1セッション: Writing Debuggers in Plain Ruby! Fact or fiction? - RubyKaigi 2019(@gsamokovarov)(見に行けず😇)
- Day2セッション: Beyond `puts`: TruffleRuby’s Modern Debugger Using Chrome - RubyKaigi 2019(@nirvdrum)
- Day2セッション: Yabeda: Monitoring monogatari - RubyKaigi 2019(見に行けず😇)
- Day3セッション: Cleaning up a huge ruby application - RubyKaigi 2019(@riseshia)(見に行けず😇)
- Day2セッション: Actionable Code Coverage - RubyKaigi 2019(見に行けず😇)
「Cleaning up a huge ruby application」を見たmorimorihogeさんの所感は「Ruby 2.4から入ったコード実行されたどうかを調べるIseqLoggerを使ったり、2.6のcoverage機能を使って『コードはあるけど実際には実行されていないコード』を抽出・削除していく話。完全自動化まではいかないけれども、膨大なコードからアタリを付けて消していくのに十分な情報が得られているように見えた」でした。
「Bundler」
- Day3セッション: The future of the Bundled Bundler with RubyGems - RubyKaigi 2019(@hsbt)(見に行けず😇)
- Day3セッション: Working towards Bundler 3 - RubyKaigi 2019(@oceanicpanda)(見に行けず😇)
「The future of the Bundled Bundler with RubyGems」では、Bundlerの現状と、将来のBundler 4で入るbreaking changesなどが紹介されていました。
「API」
- Day2セッション: How to use OpenAPI3 for API developer - RubyKaigi 2019(@ota42y)(見に行けず😇)
- Day3セッション: Timezone API - RubyKaigi 2019(@n0kada)(見に行けず😇)
「キーワードで振り返るRubyKaigi 2019」はこれにて一区切りいたします🙇。
関連記事
キーワードで振り返るRubyKaigi 2019@博多(#3)サーバーレス、スレッド、データサイエンス、Apple IIほか