RubyKaigi 2017 参加記録(3日目)

RubyKaigi 3日目のメモです。

1日目 autopp.hatenablog.com

2日目 autopp.hatenablog.com

Compacting GC in MRI

CRuby に手を加えて Compacting GC を実装した話。思っていた以上に Ruby のオブジェクトは移動できないものが多い……(文字列リテラル動かせないのはきつい)

なぜ必要なのか、どのように実装したのか、何が実装上のポイントとなるか、そのどれもがわかりやすかった。
そして何より最後の「無理と思っていることも何故無理なのか考えてみよう、自分の思い込みに対して疑問を持とう」というメッセージがとてもよかった。

Ruby for Distributed Storage System

Treasure Data で現在開発中の分散ストレージの実装について。

シリアライズ/デシアライズがRubyの方が圧倒的に楽、というのはとてもわかる。Ruby がメインではない話ではあったが、「Ruby を使い込んでいるからこそ要望が出てくる」というのは、Ruby に限らない話だなぁ、と。

ところでtry-with-resource相当のものが欲しいというのは、File.openみたいなブロック受け取るメソッドを定義するのがダルい、ということなのかな。

Bundler 2

来る Bundler 2.0 について、1.x からの削除/追加/変更を中心に紹介。

削除・変更される機能は、基本的には他機能で代替可能なので深刻な問題にはならなそうだけど、コマンドライン操作に関係する変更は手癖がついてる人もいそうなので注意が必要そう。

「2.x は 1.x との後方互換性はない」という話だったけど、どうも「2.xでbundleして1.xで実行することはできない」ということらしい。たぶん。

Memory Fragmentation and Bloat in Ruby

Web アプリケーションなどで起きるメモリフラグメンテーションの原因とその対策について。

英語がうまく聞き取れなかったけど、やっぱり malloc の実装はちゃんと一度読んでおいた方がいいのかな……

Ruby Extension Library Verified using Coq Proof-assistant

Coq で証明したコードを元に Ruby(のC拡張)コードを生成する話。

カリーハワード対応とか久々に聞いて少し懐かしかった。
アプローチはわかりやすかったし、C変換できれば多くの言語がカバーできるというのも結構よさげ。証明も Ruby で記述したい……というのはさすがに野暮ですかね。

How to write synchronization mechanisms for Fiber

Process, Thread, Fiber それぞれの説明と、Fiber で並行(っぽい)処理を書くためテクニック紹介。

発表聞いただけだと Fiber 無理にがんばる必要なくね? となってしまいそうになったけど、Enumeratorみたいな API を提供するのには今日のテクニックは結構参考になりそうだと感じた。
あと stream を読み取れる JSON パーサ欲しいですね。

Keynote

CRuby に JIT コンパイルを導入している MJIT プロジェクトの話。

LibGCCJITなる存在を初めて知ったけど、それよりも直接GCC使ったほうがいいというのは意外だった。あと既存JITはライセンス・特許の問題がある、というのもあまり考えたことなかったけど言われてみれば確かに、という感じ。

3日間朝から晩まで濃い話を聞き続けたけど、最後の最後に最大クラスに重いのでガツンと殴られたような発表だった。
「安定化まではあと1年欲しい」とおっしゃっていたけど、1年で足りちゃうんですね……


今回の旅全体の話は元気があれば後日にでも。

スピーカー、スタッフの皆様ありがとうございました。
初めて参加しましたがとても刺激的で楽しい3日間でした。