asm.js is 何

解説記事じゃないですし、内容は保証しません。

asm.js は低レベル言語

仕様書[1]によれば、asm.jsはJavaScriptの厳密なサブセットであって、コンパイラーの低レベルで効率的なターゲット言語として使うことができる言語だ。

This specification defines asm.js, a strict subset of JavaScript that can be used as a low-level, efficient target language for compilers.

http://asmjs.org/spec/latest/

コンピューターの話に出てくる「低レベル」(低水準)は「ハードウェアに近い」という意味だ。低レベルのプログラミング言語には、プロセッサーが解釈し実行するマシン語や、マシン語を人間に読みやすい形に逐語訳したアセンブリ言語などがある。

つまり、asm.jsは、コンピューターが処理しやすいように設計された言語で、人間が直接読み書きする用途の言語ではない。

もちろん、asm.js はアセンブリ言語のように読み書きすることはできる*1。ただ、それは低レベル言語の専門知識を持っている人がやることで、多くの人は高レベル言語でプログラムを書いた上で、コンパイラーを使って asm.js のコードにコンパイルすればいい。この時使う高レベル言語はC言語C++など、ランタイムライブラリーが無くて(あるいは小さくて)、静的解析がしやすい言語だとよい。CoffeeScriptは、普通にJavaScriptをコンパイルするのと変わらず、速くなりません。

Web標準

効率的なコードを実行するだけなら、別にJavaバイトコードでも .NET Assembly でも RPython でも LLVM でもいいのだけど、そういった技術をブラウザに搭載すると、「Web標準」から外れてしまう。Firefox しか対応していなかったら事実上互換性がないとかいう意見があるけど、それはWebGLだとか他の「Web標準」も同じなわけで、asm.jsだけの話ではないし、asm.jsは単なるJavaScriptのサブセットで既存のブラウザでも動くわけだから、ずっとマシだと言える。

UIもアプリケーションも既存のWeb技術を使う Firefox OS との絡みも考えれば、 asm.js が必要なのだろうと思う。

*1:asm.jsのasmはアセンブリ言語 assembly language の略のasmだろう