"WebKit 開発チームは 6 月 2 日、WebKit の JavaScript エンジンのための新しいインタプリタの開発を発表した。コードネームは SquirrelFish という。WebKit のオフィシャルブログによると(source)、SquirrelFish はこれまで WebKit で使われていたインタプリタの 1.6 倍高速だという。
interpretation.SquirrelFish はこれまでのインタプリタ実装とは異なり、構文ツリーの走査ではなくバイトコードベースの戦略を使って解釈をおこなう。
SquirrelFish のバイトコードエンジンはツリー走査をおこなうインタプリタがもつオーバーヘッドの大部分をうまく取り除いている。ひとつめは、バイトコードのストリームが、プログラムの実行に必要なオペレーションをまさにそのまま記述している点。バイトコードへコンパイルすることで、無意味な文法構造は自然と削除される。ふたつめは、バイトコードのディスパッチが一回の直接メモリ読出とそれにつづく一回の間接ジャンプからなるという点で、そのためバイトコード命令の実行は構文ツリーのノードを辿るのに比べてずっと速い。みっつめは、構文ツリーを利用しなくなったことで、構文ツリーのノードからノードへと実行時の状態を持ち歩く必要がなくなった点である。
インタプリタがバイトコードを利用するようになったことで、バイトコードインタプリタに利用できるあらゆる最適化が適用可能となった。それらを生かせば SquirrelFish は将来的にさらなる速度向上が期待できる。
バイトコード表現を手にした今、私たちが利用することのできるコンパイル時の最適化として以下のものが挙げられる。
- 定数の畳み込み
- より積極的な複写の伝播
- 型推論(正確なものと必ずしもそうでないもの両方)
- 式のコンテキストに基づく特化(特に void と boolean のコンテキスト)
- のぞき穴最適化
- エスケープ分析
SquirrelFish チームは、自分たちのプロジェクトが同じ分野における他の人々の仕事からインスピレーションを得たことを、発表のなかで認めている。
SquirrelFish は、その設計の多くを、効率的な仮想マシンの分野における最新の研究に負っている。M. Anton Ertl 教授らや David Gregg 教授ら、そして Lua 言語の開発者による研究などだ。
原文はこちらです:http://www.infoq.com/news/2008/06/SquirrelFishAnnouncement