RubyKaigi 2019 参加記録(1日目)

4/18 - 4/20 に福岡で開催中の RubyKaigi 2019 に参加しています。

1日目に聞いたセッションについて忘れないように雑にメモっておきます。 本当に雑です。

Keynote: The Year of Concurrency

Ruby 3 の展望について。Static Analysis や Guild, Auto fibers が大きく取り上げられていた。

使う機会がなくいわゆるコルーチンというくらいの理解でしかなかった Fiber が Auto fiber として進化しようとしているのは初耳だった。Thread と比べてどうなるのか期待したいところ。

あと(3.0では諦めたようだが)バッククォート文字列を非推奨にする計画があるとのことで、少し身構えている。Alt Perl/Alt Shell Script として使っている Ruby コードが根こそぎ死ぬんじゃないだろうか。

Ruby 3 Progress Report

実質的に Keynote の続き & 補足的な流れで Ruby 3 開発の現状について。

キーワード引数の非互換修正は以前の大江戸 RubyKaigi でも聞いていたが本当に大変そう……個人的には現状の振る舞いがバグっているのでなんとかしたいという方向は大賛成なので、なんとかいい感じの落とし所を目指してくれると嬉しい。

Numbered Parameters の文法は @1_1 にする方がそれっぽいかな、と思ったけど、互換性完全死亡なのでやはり厳しいかな……

あと Method オブジェクト取得用シンタックスfoo.:method?)が提供されそうなのが嬉しい。

How to use OpenAPI3 for API developer

OpenAPI 3 とその周辺ツールの紹介、特に committee について。

committee は OpenAPI の spec を入力に受け取って動作する HTTP の request と response を検証する rack middlware。OpenAPI のパース部分は openapi_parser という gem にくくりだされているため、Ruby で OpenAPI 周りをごにょごにょしようとするなら覚えておくと良さそう。

Write a Ruby interpreter in Ruby for Ruby 3

現在 C で書かれているメソッドを Ruby で書けるようにするための新しい FFI モデルの提案。実は Ruby よりも C の方が遅いケースがあるというのは個人的にはちょっと衝撃的だった。

「Guild を導入するにあたって、C 関数にコンテキストを受け取る引数を追加したい(けど互換性が死ぬ)」という動機は、まあそうだよね、という感じ。

全体の動作としてどうやって動くのかが追い切れなかったが、今後どうなっていくのか気になるところ。

A Type-level Ruby Interpreter for Testing and Understanding

Ruby 3 で入る予定(?)の Type Profiler の現状報告的な発表。Type Profiler は型注釈がないコードを解析して、不適切な呼び出しなどを報告したり、Ruby 3 で入る予定の型定義(.rbi ファイル)を出力する。

個人的にはクラスの推論というより「このメソッドが定義されていること」というインタフェース的なものの推論がほしい気がするが、サポートされるのだろうか。(もっとも Type Profiler のターゲットがアプリケーションコードであれば優先度は低いかもしれないが)

Fibers Are the Right Solution

I/O がボトルネックになるワークロード、Non blocking I/O、コールバック地獄といったよくある事象とそれに対して Fiber が如何に適切かという話。

Matz の Keynote を聞いてから急激に Auto Fiber が気になっているので、こちらも今後がどうなるか注目したいところ。

Pattern matching - New feature in Ruby 2.7

ちょうど昨日 trunk に入ったパターンマッチング記法の紹介。

個人的に 2.7 で最も気になっている機能。ライブラリレベルの実装もこれまでいくつかあったが、やはり言語レベルでサポートしてくれるのはとても嬉しい。

Array pattern と Hash pattern をサポートしてくれているのも需要をわかっている感じがする。少し気になるのは Hash pattern が symbol キーしかサポートしてないところ。JSON.parseYAML.parse に思いを馳せると、string キーへの対応もなんらかの形で入ってほしい。


気力と体力が保ったら2日目に続きます。