WebAssembly

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.

WebAssembly は JavaScript のオブジェクトで、 WebAssembly に関するすべての機能の名前空間の役割をします。

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

概要

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

コンストラクタープロパティ

WebAssembly.CompileError()

WebAssembly のデコードまたは検証中のエラーを示します。

WebAssembly.Global()

グローバル変数のインスタンスを表し、 JavaScript からアクセス可能で、 1 つ以上の WebAssembly.Module インスタンスの間でインポート/エクスポート可能です。これにより、複数のモジュールを動的リンクすることができます。

WebAssembly.Instance()

ステートフルで、実行可能な WebAssembly.Module のインスタンスです。

WebAssembly.LinkError()

(関数開始後のトラップではなく) モジュールの初期化時に発生したエラーを示します。

WebAssembly.Memory()

buffer プロパティが可変長の ArrayBuffer であり、これが WebAssembly の Instance からアクセス可能なメモリーのバイト列を保持しています。

WebAssembly.Module()

ステートレスの WebAssembly のコードであり、ブラウザーでコンパイルされ、効率的にワーカーと共有することができ、複数回インスタンス化することができます。

WebAssembly.RuntimeError()

WebAssembly がトラップを指定するたびに例外として発生するエラー型です。

WebAssembly.Table()

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) を返します。

.wasm モジュールを読み込み、コンパイルし、インスタンス化する

次の例 (GitHub 上の instantiate-streaming.html のデモと、動作例も参照) は、基礎となるソースから .wasm モジュールを直接ストリーミングし、コンパイルしてインスタンス化し、 ResultObject で履行されるプロミスを返します。 instantiateStreaming() 関数は Response オブジェクトのプロミスを受け付けるので、 fetch() の呼び出し結果を直接渡すと、履行されたときにレスポンスを関数に渡すことができます。

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

WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
  (obj) => obj.instance.exports.exported_func(),
);

それから ResultObject の instance メンバーにアクセスすると、呼び出し対象のエクスポートされた関数が入っています。

仕様書

Specification
WebAssembly JavaScript Interface
# webassembly-namespace

ブラウザーの互換性

BCD tables only load in the browser

関連情報