llvmrubyを使ってみた

少しいじってみました。主にRubyJITを目指しているruby_vm.rbあたりを主にいじっています。
面白いのですが、まだちょっと完成度が低く感じます。

気づいたこと

  1. Ruby 1.9.0でも古いバージョンを使っているような気がします。新しいバージョンだと動かないところがちょくちょくあります。
  2. Symbolをllvmの形式に変換するSymbol#llvmがうまく動かないようです。みてみるとこれでいいような気がするのですが、なぜかうまく行きません。Symbol#llvmは変数の参照で結構使われていますが、rb_to_idへの引数として使うときは、foo.llvmの代わりにfoo.to_s.llvmとするととりあえず動きます。速度は遅そうですが。
  3. :branchif, :unless, :jumpなどでラベルが使えません。そういうことで、RubyVM::InstructionSequence.compileでコンパイルしてJITで高速実行といったことはまだ出来ないようです。

そういうことで、完成度は低いのですが方向性はばっちりです。すぐにJITが実現されるのではないでしょうか。
オブジェクトファイルがでかいのが欠点ですが。私のところではllvmruby.soが16MBytes以上あります。