約12時間前、John Resig
はTwitterで
ツイートし、
Google I / Oカンファレンスで、V8エンジンとGoogle Chromeブラウザーでの
Asm.jsサポートの改善を発表しました。
Asm.jsは
Habrahabr( 1、2 )で言及さ
れているため、その利点は多くの読者に知られるようになります。 Firefoxブラウザー(Mozilla Foundationによって最初に導入された場所)だけでなく、V8エンジン(したがって、それに基づいて構築され
たNode.jsエンジンにも!)でこれらの利点の出現を非常に近い将来に期待することは、彼らにとってさらに楽しいこと
です。 Google Chromeブラウザで。
しかし、これまで自分でこの斬新さを見逃した読者のために、私はその本質を簡単に思い出します。
Asm.jsはJavaScript言語の特別なサブセットです。スクリプトの作成者は、スクリプト自体に制限するため、実行
時(ジャストイン
タイム、 JIT)だけでなく、事前
(事前
、 AOT)に解釈されたコードを最適化する機能を提供します)、つまり、一度そのようなjavascriptがいくつかのマシンコードに明確に事前一致することが可能になります。 この効果は、自分自身を制限する顕著な努力を犠牲にして達成されます。 (特に、
「 | 0 」
操作および他の同様の特別な手法を使用すると、関数の各入力パラメーターの値タイプと出力値が一意に設定され、変更されないことが判明します。)しかし、その結果は、javascriptの実行速度の前例のない増加です-今では高速化コンパイルされたプログラム(C
またはC ++)に 2回以内で劣る。
Asm.jsの実用的なアプリケーションの主な方向は、手動プログラミングの分野(プログラマーにとってはAsm.jsの制限を意識的に遵守することは受け入れがたいほど痛みを伴うことがあります)にさえありませんが、完全自動のトランスコンパイル(他のプログラミング言語からJavaScriptへの翻訳)の分野では十分ですJavaScript自体と同じようにクロスプラットフォームになる複雑なプログラムとライブラリ。
Emscriptenは、部分的には
Mandreelも、そのような
トランスコンパイルの手段として最もよく知られています。
コマンドラインからの非常に多くのプログラム(GUIを必要としない)をすぐにクロスプラットフォームにできる
(Node.jsはWindows、Mac OS X、およびLinuxでの実行を保証する)将来に迫っています。マシンコードの代わりに(LLVMを使用してからEmscriptenを使用して)JavaScriptでコンパイルし、実行速度を2倍にします。
ただし、Emscriptenページの
印象的な例は、特定のグラフィカルAPI(OpenGL、またはOpenGL ES、またはOpenVG)ではなく、
EGLを
介した転送に適しているグラフィカルアプリケーションがあることを明確に示しています。 確かに、そのようなNode.jsアプリケーションでは十分ではありません。それらをWebに転送する必要があります。つまり、ブラウザーでのアプリケーションの実行です。 Asm.jsサポートに参加したFirefoxとGoogle Chromeは、上記の前例のない速度で実行を開始します。 ただし、他のすべてのブラウザー(IE、Opera、Safariなど)も
非選択的に実行できると予測するのは簡単です(
Asm.jsは通常のJavaScriptのサブセットであるため)。 唯一の違いは実行速度です。