Ruby 2.7 ISeq バイナリ表現の改善について +α

【平成 Ruby 会議 01】@NagayamaRyoga さんのセッションをとぅぎゃりました。
0
黒曜@Leaner Technologies @kokuyouwind

Cookpadのブログに載ってる話。インターンでこんなことやるの…しゅごい… techlife.cookpad.com/entry/2019/09/… #heiseirubykaigiA

2019-12-14 13:47:22
黒曜@Leaner Technologies @kokuyouwind

RubyVM::InstructionSequenceクラスの説明。compileしたりevalしたり、バイナリ文字列とISeqを相互変換したりできる。 #heiseirubykaigiA

2019-12-14 13:48:52
シロ @shiroemons

アプリ起動の高速化 Bootsnap  コンパイル結果をキャッシュ #heiseirubykaigiA

2019-12-14 13:49:15
kinoppyd @GhostBrain

bootsnap、ディスクが少ない環境でやってると死ぬ #heiseirubykaigi #heiseirubykaigia

2019-12-14 13:49:37
Yuichiro Suzuki @u16suzu

アプリケーションの起動の高速化できる!! タイムリー! #heiseirubykaigiA

2019-12-14 13:50:00
ムネ @ukemi_munehiro

RubyのインターフェースをRubyで書くのか #heiseirubykaigiA

2019-12-14 13:50:21
シロ @shiroemons

Ruby標準ライブラリ(2.7以降)  一部のクラス定義(GC、TracePointなど) #heiseirubykaigiA

2019-12-14 13:50:39
黒曜@Leaner Technologies @kokuyouwind

利用場面。コンパイル結果キャッシュによるアプリ起動の高速化。Bootsnapで使われており、Rails5.2以降ではデフォルト。またRuby 2.7以降ではバイナリ埋め込みによってGC, TracePointのインターフェイスがC言語からRubyに移動した。 #heiseirubykaigiA

2019-12-14 13:50:46
福本 晃之/Teruhisa Fukumoto @terry_i_

1. 情報を失わない 2. 読み込みが高速 3. サイズが小さくなっていること #heiseirubykaigi #heiseirubykaigiA

2019-12-14 13:51:55
黒曜@Leaner Technologies @kokuyouwind

バイナリにするとサイズが膨らむので省サイズ化したい。情報を失わない、読み込みが高速、という要求を満たすように省サイズ化する。 #heiseirubykaigiA

2019-12-14 13:52:10
黒曜@Leaner Technologies @kokuyouwind

ベンチマーク結果。単一スクリプトではRubyファイル137KBに対し、1964KB->464KB(24%)まで省サイズ化。バイナリデコード時間は4.278ms->4.581msと僅かにオーバーヘッドがかかるが、ファイル読み込みと合わせると5.594ms->4.934msと高速化。 #heiseirubykaigiA

2019-12-14 13:55:09
ムネ @ukemi_munehiro

バイナリ変換って、どんな時に使うのかな? #heiseirubykaigiA

2019-12-14 13:55:50
黒曜@Leaner Technologies @kokuyouwind

ファイル読み込みにかかる時間は媒体によって差がありすぎるだろうし参考値かなぁ。とはいえ、オーバーヘッド小さいしサイズ比考えたら僅かな問題っぽい。 #heiseirubykaigiA

2019-12-14 13:56:18
ルニ / イカのプログラマ @lni_T

bootsnapのキャッシュサイズ削減は嬉しいっぽい? #heiseirubykaigiA

2019-12-14 13:58:00