Rubyインタプリタ開発者 笹田耕一さんによるAOTコンパイラ「ISeq」解説 #rubykaigi 2015

Compiling Ruby scripts Koichi Sasada @_ko1 http://rubykaigi.org/2015/presentations/ko1
3
どみにをん525 @Dominion525

バイトコードよりインタラクションシーケンスという語を使う雰囲気。#rubykaigi

2015-12-11 13:45:54
そのっつ (Naotoshi Seo) @sonots

Ruby に AOT コンパイルの機能が入ったってのは大きい話だなー #rubykaigi

2015-12-11 13:46:22
p-hone @p__hone

Iseqを一度に全部ロードするのでなく、必要に応じてロードする lazy loading を実装 #rubykaigi

2015-12-11 13:48:07
FUKUI Osamu @iR3

笹田さんのCompiling Ruby scripts のお話。ISeq Store serialized program and load #rubykaigi instagram.com/p/_I4AnDiqM_/

2015-12-11 13:48:12
拡大
p-hone @p__hone

ツリー構造のLazy loadingなので、単純に子ノードの取得を実行時に遅延させる感じっぽい。1度も呼ばれないメソッドは取得されない。 #rubykaigi

2015-12-11 13:50:12
tagomoris @tagomoris

遅延ロードするとメモリのフラグメンテーション起こしたりしないのかな? #rubykaigi

2015-12-11 13:50:37
ohkawa @ohkawa_m

Technique Lazy loading. 本当に必要になったタイミングで、ロードする。1つのクラスでも、1つ1つのメンバ変数は使うときになったらロードする。メンバ変数があっても使わない場合は最後までロードしないこともある #rubykaigi

2015-12-11 13:50:37
アルフォートおじさん @joker1007

FileUtilsみたいなものをrequireしても使わないもののISeqをロードしなくて済む。これは良いな。 #rubykaigi

2015-12-11 13:50:38
アルフォートおじさん @joker1007

え、akrさんの本完売したの……。買いそびれた……。 #rubykaigi

2015-12-11 13:51:59
Hiroshi Nakamura @nahi

Lazy bytecode loading design depends on the fact that it doesn't support verification? #rubykaigi @_ko1

2015-12-11 13:52:19
Sadayuki Furuhashi @frsyuki

ほう。Ruby::VM::InstructionSequenceにload_iseqが増えるということかな。それは…色々と面白いのでは? #rubykaigi

2015-12-11 13:52:35
Kazuho Oku @kazuho

途中で setuid するようなケースも考えると、一般的なopcodeキャッシュ提供は難しいだろうし、APIだけ提供するってのは納得感ある #rubykaigi

2015-12-11 13:52:49
よう @youchan

「低レベルAPIを提供する。」そうきたか! #rubykaigi

2015-12-11 13:52:54
病気の美少女 @lyrical_logical

コンパイルしたバイナリのおき場所決まらないのでとりあえず低レイヤな API 作ってるぜ #rubykaigi

2015-12-11 13:53:13
p-hone @p__hone

コンパイル済のbinaryをどこに保存するか、など仕様は決まりそうにないので低レイヤーの関数だけをとりあえず用意したとのこと。(たしかにこういうのは揉めそうだw #rubykaigi

2015-12-11 13:53:20
ohkawa @ohkawa_m

コードをどこにロードするか指定できる? #rubykaigi

2015-12-11 13:53:46
アルフォートおじさん @joker1007

おお、じゃあこれ自分らでiseqのシリアライズして、どこにストアしてロードするっての制御できるんかな。 #rubykaigi

2015-12-11 13:54:15
Sadayuki Furuhashi @frsyuki

InstructionSequence#to_binary でシリアライズ、#load_from_binary でデシリアライズか。では、あとはバイト列を生成する輩が出てくるに違いない。 #rubykaigi

2015-12-11 13:54:20
黒曜@Leaner Technologies @kokuyouwind

今回は戦略を決めない! 戦略を切り替えれるようにローレベルのAPIを提供する。.load_iseq, #to_binary, .load_from_binaryを自分で定義することで戦略を切り替えれる。 #rubykaigi

2015-12-11 13:55:23
Sadayuki Furuhashi @frsyuki

rake-compiler のようなツールが出てくるのではないかな。gemにパッケージングするときに、iseqファイルを作って、実行時にはコンパイル済みiseqファイルを読み込むように.rbを書き換えるようなツール。 #rubykaigi

2015-12-11 13:55:23
よう @youchan

自動ロードはだれかがgemをつくりそう #rubykaigi

2015-12-11 13:56:05