WebAssembly
WebAssembly
は JavaScript のオブジェクトで、 WebAssembly に関するすべての機能の名前空間の役割をします。
他のグローバルオブジェクトとは異なり、 WebAssembly
はコンストラクターではありません (関数オブジェクトではありません) 。数学の定数や関数の名前空間である Math
や 、国際化のコンストラクターやその他の言語を意識した関数ための Intl
と同様のものです。
概要
WebAssembly
オブジェクトの主な用途は次のとおりです。
WebAssembly.instantiate()
関数を用いた WebAssembly コードの読み込み。WebAssembly.Memory()
/WebAssembly.Table()
コンストラクターによる新しいメモリーやテーブルインスタンスの生成。WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
コンストラクターによる、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()
の呼び出し結果を直接渡すと、履行されたときにレスポンスを関数に渡すことができます。
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