v8 for Google Chrome
ちょっと出遅れましたが、巷を席捲するGoogleのwebブラウザ「Chrome」。
WebKitベースのUIとしてのブラウザはもちろん、注目を集めているのが、弊社でJava HotSpot VMを開発していたLars Bakが中心となって、独自開発したjavascriptレンダリングエンジン「v8」。
このv8の特徴としては3つ。
- プロパティへの高速なアクセス
- ダイナミックなマシンコード生成
- 効率的なGC
まずプロパティへの高速なアクセスとは、javascriptはダイナミックな言語であるため、自由にオブジェクトにプロパティを追加・削除を行うことができますが、それを実現するために多くのjavascriptエンジンでは、ハッシュのような辞書による実装を行っているため、プロパティにアクセスするたびに辞書をルックアップする必要が発生し、実行速度を低下させています。このルックアップをなくすため、v8では隠れたclass(hidden class)というものを用いて、同じプロパティを持つオブジェクトをまとめ、プロパティへのアクセスを高速化させています。
ダイナミックなマシンコード生成とは、v8ではjavascriptは最初の実行時にバイトコードやインタープリターではなく、直接マシンコードに変換され、実行される。そのためより高速に実行可能にするもの。
そして、v8のガベージコレクションの機能は、従来のjavascriptエンジンでは、JavaScriptエンジンでは、メモリ上のオブジェクトやポインタの位置を正確に把握していないため、オブジェクトやポインタの探索に時間がかかっていたが、v8では、メモリ上のすべてのオブジェクトとポインタの場所をトラッキングし、さらにold/newという世代別GCやメモリ・コンパクションといったスマートなGCを導入することで、GCによるアプリケーションの停止時間を激減させるというものです。
このようにv8はかなり画期的なjavascriptエンジン。そのエンジンを使ってRubyを動かしたらどうなるでしょう?従来javascript上のRuby処理系としてHotRubyがありましたが、v8上で動作させた「rbv8」が早くも登場しています。
このrbv8でベンチマークすると、もちろん単純なテストですが、なんとMRIの10倍、JRuby1.1b1の約40倍高速という結果がでたようです。
rbv8自体が実験的な実装なので、比べても意味がないのかもしれませんが、如何にv8が高速化が分かるかもしれません。
v8自体はC++で実装されているので、今後さまざまなものに利用されていく可能性もあり、非常に注目です。
2008/09/04 by Tomo Nozawa
