Ruby 2.7 ISeq バイナリ表現の改善について +α
- ryamakuchi
- 748
- 1
- 0
- 0
あとで見る #heiseirubykaigi #heiseirubykaigiA techlife.cookpad.com/entry/2019/09/…
2019-12-14 13:46:40Cookpadのブログに載ってる話。インターンでこんなことやるの…しゅごい… techlife.cookpad.com/entry/2019/09/… #heiseirubykaigiA
2019-12-14 13:47:22RubyVM::InstructionSequenceクラスの説明。compileしたりevalしたり、バイナリ文字列とISeqを相互変換したりできる。 #heiseirubykaigiA
2019-12-14 13:48:52bootsnap、ディスクが少ない環境でやってると死ぬ #heiseirubykaigi #heiseirubykaigia
2019-12-14 13:49:37利用場面。コンパイル結果キャッシュによるアプリ起動の高速化。Bootsnapで使われており、Rails5.2以降ではデフォルト。またRuby 2.7以降ではバイナリ埋め込みによってGC, TracePointのインターフェイスがC言語からRubyに移動した。 #heiseirubykaigiA
2019-12-14 13:50:46バイナリが溢れているw #heiseirubykaigi #heiseirubykaigiA
2019-12-14 13:51:131. 情報を失わない 2. 読み込みが高速 3. サイズが小さくなっていること #heiseirubykaigi #heiseirubykaigiA
2019-12-14 13:51:55バイナリにするとサイズが膨らむので省サイズ化したい。情報を失わない、読み込みが高速、という要求を満たすように省サイズ化する。 #heiseirubykaigiA
2019-12-14 13:52:10ベンチマーク結果。単一スクリプトではRubyファイル137KBに対し、1964KB->464KB(24%)まで省サイズ化。バイナリデコード時間は4.278ms->4.581msと僅かにオーバーヘッドがかかるが、ファイル読み込みと合わせると5.594ms->4.934msと高速化。 #heiseirubykaigiA
2019-12-14 13:55:09ファイル読み込みにかかる時間は媒体によって差がありすぎるだろうし参考値かなぁ。とはいえ、オーバーヘッド小さいしサイズ比考えたら僅かな問題っぽい。 #heiseirubykaigiA
2019-12-14 13:56:18