NEWS(12/09/14 16:36)
「Firefox 18」では“IonMonkey”を採用。JavaScriptの処理がこれまで以上に高速化
JavaScriptのコードを一度中間表現へ変換し、最適化処理を施した上で機械語へ変換
Mozillaは13日、公式ブログで“IonMonkey in Firefox 18”と題した記事を公開した。それによると、「Firefox 18」のJavaScriptエンジンには“IonMonkey”と呼ばれる新しいアーキテクチャーが採用されるとのこと。“Mozilla Developer Street”に日本語訳も公開されている。
それでは“IonMonkey”が何かを知る前に、まず「Firefox」のJavaScriptエンジンの改良の歴史を軽く振り返ってみよう。
「Firefox」には“SpiderMonkey”と呼ばれるJavaScriptエンジンが搭載されている。これはC言語で実装された世界初のJavaScript実装で、「Firefox」をはじめとする“Gecko”搭載製品などで採用されている。
「Firefox 3.5」――“TraceMonkey”
これにトレース型のJITコンパイラ“TraceMonkey”が追加されたのが「Firefox 3.5」だった。“TraceMonkey”は、インタプリタでコードを実行しながら、頻繁に利用される処理を追跡(トレース)し、その部分をネイティブコードへコンパイルすることで高速化を施す。
ただし、ピンポイントで特定の処理を大幅に高速化できる反面、高速化できる部分の少ないコードでは恩恵が得られないという難点があった。
「Firefox 4」――“JagerMonkey”
そこで「Firefox 4」では、メソッド型のJITコンパイラ“JagerMonkey”を新たに追加した。“JagerMonkey”はメソッド単位でネイティブコードへコンパイルするため、トレース型ほどのピンポイントな最適化は行えないが、高速化の恩恵は広範囲に及ぶ。
「Firefox 4」では、“JaegarMonkey”で全体的な処理速度を底上げし、“TraceMonkey”で頻繁に現れる処理をピンポイントでさらに高速化する2段構えになっていた。
「Firefox 9」――型推論(Type Inference)
さらに「Firefox 9」では、“型推論”技術が盛り込まれた。“SpiderMonkey”でのコード解析および実行時の変数監視で得たプログラムの型情報を“JagerMonkey”のJITコンパイルで活用することでより最適化されたコードを生成するという仕組みで、従来バージョンの30%以上という高速化を果たした。これに伴い“TraceMonkey”は「Firefox 9」でその役目を終える。
「Firefox 18」――“IonMonkey”
“TraceMonkey”や“JaegarMonkey”といったこれまでのJITエンジンは、JavaScriptから機械語へとほぼ直接変換を行なっていた。そのため、逐次的な最適化は行われていたものの、コード全体を見渡した全体的な最適化は十分に行えていなかった。
“IonMonkey”はこの問題を解決するためのアーキテクチャーと言える。JavaScriptのコードを一度中間表現へ変換し、その中間表現へ最適化処理を施した上で機械語へ変換する。
これによるメリットは、パフォーマンスの向上だけではない。保守性が向上するため、あとから処理を追加したり、アルゴリズムを改良するといったことがこれまでよりも容易になる。これにより、JavaScriptエンジンのさらなる改良への基礎が整ったというわけだ。
なお、“IonMonkey”は「Firefox 18」で有効化されており、11月20日にはベータ版としてリリースされる予定。