遅くなりましたが、3日目の様子を天野(@pataiji)からお送りします。
街はカープ優勝お祝い一色でしたが、スーパーカブももうすぐ1億台突破と生誕60周年でお祝いですね。おめでたい。
さてRubyKaigi最終日。来年の開催地も発表されていました。
Compacting GC in MRI
Compacting GC in MRI - RubyKaigi 2017
巷で話題の草生えるの@tenderloveさん。
Unicornの起動時間を減らしたい。
Page Faultsを減らしたい。
GCが原因の一つ。
heap compactionで解決できる。
Rubyでは不可能と言われてたけどなぜ不可能なのか説明できなかったので試してみることにした。
簡単なのでアルゴリズムにはtwo finger compactionを選んだ。
Cで確保しているものはGCから検知できなかったり、他にも多くの制約があるので何もメモリ状を移動できなく見えるが、実際には46%も移動できた。
Irb 20th anniversary memorial session: Reish and Irb2
Irb 20th anniversary memorial session: Reish and Irb2 - RubyKaigi 2017
Irb作者の@keijuさん。
Irbは今年で20周年。
IrbはRubyの振る舞いを確かめたりデバッグで便利だが、Irb上で生活してる人はいないと思う。
Shell上でRubyっぽいことが出来るreishを開発中。
ShellなんだけどRubyっぽいこと書き方ができる。
reish上のIrbを動かしてIrb2にしたい。
zshみたいな入力補完やヘルプが出ると良さそう。
buildすれば開発中のものを試せるそうです。
How to write synchronization mechanisms for Fiber
How to write synchronization mechanisms for Fiber - RubyKaigi 2017
Rubyコミッターの@m_sekiさん。
Fiberどこがすごいのかわからないから自分で使ってみた。
Theadより大変だと思ってたけどその通りだった
resumeは初回と2回目以降で挙動が変わる。
resume <-> yield を行き来することになるので何回目のresumeなんだと混乱する。
オススメはFiber.new
の直後にresumeして、やることがなくなったらyield。
Threadと併用するとエラーになるので使い所が難しい。
Towards Ruby 3x3 performance
Towards Ruby 3x3 performance - RubyKaigi 2017
20年間GCCの開発をされてきた@vnmakarovさん。
Ruby 3をRuby 2より3倍早くするという目標に対し笹田さんはMRIを高速化を進めている。
CPUバウンドなプログラムは高速化出来る。メモリやIOバウンドなプログラムでは難しい。
@vnmakarovaさんはRubyの中間表現を最適化してJITを使うアプローチを取った。
Stack insnsよりRTL insnsの方がメモリトラフィックが少ない、インタプリタやJITとコードを共有出来るなどのメリットがある。
RTL insnsを用意するにはStack insnsから作る簡単な方法と直接MRIのノードから作る高速な方法があるが、後者を採用した。
Stack insns -> RTL insns に変更することで27%の高速化した。
JITはGCCを採用。
こうして作成したMJITをoptcarrotでベンチマークするとほぼ3倍の速度が出ていた。
まだmake test
しかパスしなかったりWindowsで動作しないなど、開発初期段階。成熟のために少なくとも1年は必要。
また、さらなる最適化が必要。
MRIに取り込まれるかは分からないがアイデアが取り込まれると嬉しい。
細かいことはよく分からなかったけど、凄そうでした(小並感)
例年通りハイレベルな最終日キーノートでしたので、Twitterのタイムラインを貼っておきます。
Closing
来年の開催地は仙台で開催日は 5/31 ~ 6/2 とのことです。 昨年の京都には天橋立、今年の広島には宮島があり、仙台の近くにはMatz islandこと松島があるから日本三景コンプなるほどです。
スタッフ、登壇者の皆様、大変お疲れ様でした。