Rubyインタプリタ開発者 笹田耕一さんによるAOTコンパイラ「ISeq」解説 #rubykaigi 2015
笹田さんのCompiling Ruby scripts のお話。ISeq Store serialized program and load #rubykaigi instagram.com/p/_I4AnDiqM_/
2015-12-11 13:48:12ツリー構造のLazy loadingなので、単純に子ノードの取得を実行時に遅延させる感じっぽい。1度も呼ばれないメソッドは取得されない。 #rubykaigi
2015-12-11 13:50:12Technique Lazy loading. 本当に必要になったタイミングで、ロードする。1つのクラスでも、1つ1つのメンバ変数は使うときになったらロードする。メンバ変数があっても使わない場合は最後までロードしないこともある #rubykaigi
2015-12-11 13:50:37FileUtilsみたいなものをrequireしても使わないもののISeqをロードしなくて済む。これは良いな。 #rubykaigi
2015-12-11 13:50:38Lazy bytecode loading design depends on the fact that it doesn't support verification? #rubykaigi @_ko1
2015-12-11 13:52:19ほう。Ruby::VM::InstructionSequenceにload_iseqが増えるということかな。それは…色々と面白いのでは? #rubykaigi
2015-12-11 13:52:35途中で setuid するようなケースも考えると、一般的なopcodeキャッシュ提供は難しいだろうし、APIだけ提供するってのは納得感ある #rubykaigi
2015-12-11 13:52:49コンパイル済のbinaryをどこに保存するか、など仕様は決まりそうにないので低レイヤーの関数だけをとりあえず用意したとのこと。(たしかにこういうのは揉めそうだw #rubykaigi
2015-12-11 13:53:20おお、じゃあこれ自分らでiseqのシリアライズして、どこにストアしてロードするっての制御できるんかな。 #rubykaigi
2015-12-11 13:54:15InstructionSequence#to_binary でシリアライズ、#load_from_binary でデシリアライズか。では、あとはバイト列を生成する輩が出てくるに違いない。 #rubykaigi
2015-12-11 13:54:20今回は戦略を決めない! 戦略を切り替えれるようにローレベルのAPIを提供する。.load_iseq, #to_binary, .load_from_binaryを自分で定義することで戦略を切り替えれる。 #rubykaigi
2015-12-11 13:55:23rake-compiler のようなツールが出てくるのではないかな。gemにパッケージングするときに、iseqファイルを作って、実行時にはコンパイル済みiseqファイルを読み込むように.rbを書き換えるようなツール。 #rubykaigi
2015-12-11 13:55:23