WebAssembly
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2017年10月.
* Some parts of this feature may have varying levels of support.
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> |
ブラウザーの互換性
Loading…