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() の呼び出し結果を直接渡すと、履行されたときにレスポンスを関数に渡すことができます。
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