WebAssembly

これは実験的な機能です。本番で使用する前にブラウザー実装状況をチェックしてください。

WebAssembly JavaScript オブジェクトは全ての WebAssembly に関連する機能の名前空間として振る舞います。

他のグローバルオブジェクトとは異なり、WebAssembly はコンストラクタではありません (関数オブジェクトではない) 。数学定数、関数の名前空間である Math や 、国際化コンストラクタと他の言語に依存する関数のための Intl と同等のものです。

概要

WebAssembly オブジェクトの主な用途は次のとおりです:

メソッド

WebAssembly.instantiate()
WebAssembly コードをコンパイル、インスタンス化するための主要な API で、 Module と、その最初の Instance を返します。
WebAssembly.instantiateStreaming()
ソースのストリームから直接 WebAssembly モジュールをコンパイル、インスタンス化し、 Module と、その最初の Instance を返します。
WebAssembly.compile()
WebAssembly.Module を用いて WebAssembly バイナリコードからコンパイルします。インスタンス化は別ステップとして分離されます。
WebAssembly.compileStreaming()
ソースのストリームから直接 WebAssembly.Module にコンパイルします。インスタンス化は別ステップとして分離されます。
WebAssembly.validate()
WebAssembly バイナリコードの型付き配列を検証し、バイト列が有効な WebAssembly コードか (true) 否か (false) を返します。

コンストラクタ

WebAssembly.Module()
新しい WebAssembly Module オブジェクトを生成します。
WebAssembly.Instance()
新しい WebAssembly Instance オブジェクトを生成します。
WebAssembly.Memory()
新しい WebAssembly Memory オブジェクトを生成します。
WebAssembly.Table()
新しい WebAssembly Table オブジェクトを生成します。
WebAssembly.CompileError()
新しい WebAssembly CompileError オブジェクトを生成します。
WebAssembly.LinkError()
新しい WebAssembly LinkError オブジェクトを生成します。
WebAssembly.RuntimeError()
新しい WebAssembly RuntimeError オブジェクトを生成します。

fetch を使用して WebAssembly バイトコードをフェッチした後、WebAssembly.instantiate() 関数を使用してモジュールをコンパイル、インスタンス化します。その過程で、WebAssembly モジュールに JavaScript の関数をインポートします。このプロミスは解決時に Module と Instance を含むオブジェクト (result) を渡します。次に、Instance からエクスポートされている エクスポートされた WebAssembly 関数 を呼び出します。

var importObject = {
  imports: {
    imported_func: function(arg) {
      console.log(arg);
    }
  }
};

fetch('simple.wasm').then(response =>
  response.arrayBuffer()
).then(bytes =>
  WebAssembly.instantiate(bytes, importObject)
).then(result =>
  result.instance.exports.exported_func()
);

: GitHub上の例 (動作例) のindex.htmlでは、我々で定義した fetchAndInstantiate() ライブラリ関数を使用しています。

仕様

仕様 策定状況 コメント
WebAssembly JavaScript Interface
WebAssembly の定義
草案 初回ドラフト定義。

ブラウザ実装状況

BCD tables only load in the browser

関連情報