llvmはrubyには堅すぎる

ささださんのコメントの返事の続きです。
たった2週間しかllvmに触っていない(しかもllvmruby越しに)ので私の勘違いかも知れないです、ということを断っておきます。
本質的には、rubyのような動的言語を実現するにあたって、llvmでネイティブコードを生成して実行するまでのオーバヘッドが大きすぎるかなとと感じていいます。llvmrubyではllvmのbit codeをネイティブコードに変換して実行するのに大体0.1秒掛かるようです。そうすると、このままでは動的にbit codeを書き換えて再実行するということはほとんど不可能です。動的言語を高速に実行するためのInline cacheなどのテクニックは動的にコードを書き換えることが必須にあると思います。そうでなければ、あらかじめ条件分岐を設ける必要があり、Inline cacheにならないためです。
そのように考えると、llvmJITを作るという試みはCなど(ひょっとすると関数型言語も)の言語は良いのですが、Rubyのような動的言語では制限があるように感じます。ちょろめのV8はネイティブを直接吐いて命令書き換えも高速に出来るようですが、移植性を犠牲にしてもそういった戦略でインプリメントしないと高速な処理系は出来ないのかなと思います。V8はGoogleのリソースに飽かせて贅沢仕様なのかなと思ったのですが、結構本質的な話なのかなと思うようになりました。

yarv2llvmで出来るとこまでやったら、その後は次のような選択があるかなと思います。

  1. llvmに手を入れる
  2. V8が使えないか考える
  3. 独自にJITライブラリを作る
  4. llvmがバージョンアップするまで待つ(llvmは動的に最適化することを考えているので、動的書き換えが効率化するようにバージョンアップするかもしれない)
  5. もう全部あきらめる