WebAssembly
読み:ウェブアセンブリー
外語:WASM: WebAssembly

 Webブラウザー用のクロスプラットフォームなプログラミング言語の一つ。WASMとも。
目次

概要
 Webブラウザー用のクロスプラットフォームなプログラミング言語は、幾つかが作られたが最終的にはJavaScriptただ一つが生き残った。
 JavaScriptは高級言語であるが、WebAssemblyは低級言語であり、このバイナリーがあらゆるブラウザー上で動作することを目標としている。発想自体はJavaに近いとも言える。
 この目的のために、WebAssemblyはasm.jsとPortable Native Client(PNaCl)をベースに開発が開始された。
 主要WebブラウザーメーカーであるApple、Microsoft、Google、Mozillaすべてが参画して開発しているため、完成後は標準として使われることが既に決まっている。

特徴

コンパイル
 C/C++などを、WASMバイナリーフォーマットにコンパイルして使用する。
 コンパイルにはclang/LLVMなどを使用する。
 つまりフロントエンドにclangなど各言語に適合するもの、バックエンドにLLVMを使用することが想定されて開発されているため、LLVMに対応できるフロントエンドが用意できれば、理論上はあらゆるプログラミング言語が利用できることになる。
 ただ開発中のこれを著している時点では、LLVMはまだWASMバイナリーフォーマットを出力できないため、LLVMは中間層として用い、バックエンドとしてbinaryenが使われている。
 LLVMとしては、LLVM 5.0からWASMバイナリーフォーマットの出力に正式対応する予定である。

WASMバイナリー
 WASMバイナリーは、8ビットを1バイトとするスタックマシンとなっており、これもJavaに似ている。数値についてはLEB128符号化が採用されており、これはAndroidDalvikおよびART(Android Runtime)に似ている。
 WASMバイナリーの機械語、つまりWebAssemblyが動作する仮想計算機(仮想マシン)用の機械語は、1バイト単位の可変長である。これ自体は人間では読みにくいので、1対1で対応するアセンブリ言語も用意されている。

HTML5
 WebAssembly自体はHTML5とは直接関係ないが、併用されることは確実である。
 Adobe FlashからHTML5にブラウザーゲームは移行が必要となるが、ゲームは速度が求められるため、将来的にはWebGL+WebAssemblyで作られることが多くなると見込まれている。

再検索