SATOXのシテオク日記

~ふもっふ、ふもふも~

asm.jsがブラウザゲームを変えるかも

まず、「asm.js」という言葉を聞いて思いつくのはnode.jsやenchant.jsとかjQueryなどを思いついちゃいますが、実はそんな類いのものでは一切ありません。
そういった意味ではネーミングが悪そうな気もしますが、JavaScriptをネイティブコード並に高速化する技術だと思えば、的を得ているネーミングかもしれません。でも、混乱しますよね。

■asm.js

asm.jsとは、Firefox 22に搭載される予定のJavaScript高速化技術で、「事前にネイティブコードにコンパイルするために、JavaScriptコードにヒントを与えるもの」といった感じです。
ネイティブコードということで、いわゆるJITに似ていますが、もう少し踏み入った高速化が可能ということになります。
GoogleのNACLが高速であるにも関わらず、CPU依存バイナリが必要で汎用性に乏しく、なかなか流行らないこの現状を変える新しい流れになる可能性がありますね。(何よりasm.jsが後方互換性があるのが大きい)

6月のリリース予定で現在開発が進んでいるFirefox 22では、JavaScriptのサブセット言語仕様であるasm.jsと、asm.jsに最適化したJavaScriptエンジンのOdionMonkeyが搭載予定とのことです。この両者の組み合わせは、JavaScriptを型つき言語として事前コンパイルすることで、いま以上に高速に実行できると期待されています。

上記の記事によると、asm.jsで最適化されたJavaScriptはV8などのエンジンに比べても3〜5倍高速で、ネイティブコードの処理と比べても2倍程度遅いだけに留まるベンチ結果が出ているそうです。
asmと言うだけあってアセンブラ風でとても人間が読みやすいコードではないため、ガシガシasm.js対応JavaScriptを書くことにはならなさそうですが、クロスコンパイラがasm.jsに対応してくれれば、幸せな未来が待っているかもしれません。
ただ、よーく考えてみると、「Java」が当初から高速にJITで動いて、ガベージコレクションによるデッドロックという苦しい悩みなどもなければ、コイツが理想的な存在だったのではないかと思います。……いや、そんなこともないか(笑)。
Emscripten」という、C言語JavaScriptのクロスコンパイラがありますが、それは一度中間コードに変換した後、JavaScriptに変換します。これを使って、Cで書かれたUnreal Engineを丸々ブラウザで動かしてしまおうという計画もあるんだそうです。

Game Developers Conference 2013(以下,GDC 2013)の2日めとなる米国時間3月26日,WebブラウザFirefox」の開発で知られる米Mozilla Foundation(以下,Mozilla)が,「Fast and Awesome HTML5 Games」(高速かつ驚愕のHTML5ゲーム)と題するセッションを開催した。

JavaScriptの遅さはCPU性能の向上でカバーできるような気がしてきたこの昨今ですが、ようするにJavaScriptをより一層の高速化させようとがんばっているわけです。