2008-10-12
llvmはrubyには堅すぎる
ささださんのコメントの返事の続きです。
たった2週間しかllvmに触っていない(しかもllvmruby越しに)ので私の勘違いかも知れないです、ということを断っておきます。
本質的には、rubyのような動的言語を実現するにあたって、llvmでネイティブコードを生成して実行するまでのオーバヘッドが大きすぎるかなとと感じていいます。llvmrubyではllvmのbit codeをネイティブコードに変換して実行するのに大体0.1秒掛かるようです。そうすると、このままでは動的にbit codeを書き換えて再実行するということはほとんど不可能です。動的言語を高速に実行するためのInline cacheなどのテクニックは動的にコードを書き換えることが必須にあると思います。そうでなければ、あらかじめ条件分岐を設ける必要があり、Inline cacheにならないためです。
そのように考えると、llvmでJITを作るという試みはCなど(ひょっとすると関数型言語も)の言語は良いのですが、Rubyのような動的言語では制限があるように感じます。ちょろめのV8はネイティブを直接吐いて命令書き換えも高速に出来るようですが、移植性を犠牲にしてもそういった戦略でインプリメントしないと高速な処理系は出来ないのかなと思います。V8はGoogleのリソースに飽かせて贅沢仕様なのかなと思ったのですが、結構本質的な話なのかなと思うようになりました。
yarv2llvmで出来るとこまでやったら、その後は次のような選択があるかなと思います。
トラックバック - http://d.hatena.ne.jp/miura1729/20081012/1223808160
リンク元
- 28 http://www.rubyist.net/~kazu/samidare/
- 2 http://a.hatena.ne.jp/fujita-y/
- 2 http://blog.search.goo.ne.jp/search_goo/result/?MT=llvm&from=web&da=all&dc=10&st=time&tg=all&ts=all&fs=all&rm=1&pg=2
- 2 http://d.hatena.ne.jp/
- 2 http://d.hatena.ne.jp/keita_yamaguchi/
- 2 http://reader.livedoor.com/reader/
- 1 http://a.hatena.ne.jp/h_sakurai/
- 1 http://blog-search.yahoo.co.jp/search?fr=top_ga1&ei=UTF-8&p=llvm
- 1 http://d.hatena.ne.jp/keita_yamaguchi/20080914/1221328049
- 1 http://d.hatena.ne.jp/keyword/ワーキングセット
でも、まだチャンピオンデータで動くだけです。単項マイナスすらサポートして無いし。もうちょっと先に進めると思います。でも、C言語相当の機能が限界かなーって思います。
Current version of yarv2llvm become little slower than this article. Because support 'self' variable. I have some idea for speed up, but I think I can't make speed of yarv2llvm with current feature over this article.