WebAssembly
Baseline
広く利用可能
*
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2017年10月以降、すべてのブラウザーで利用可能です。
* この機能の一部は、対応レベルが異なる場合があります。
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.Suspending-
一時停止関数を表します。これは、非同期(
Promiseに基づく)JavaScript 関数であり、Wasm モジュールにインポートされ、その内部から呼び出されると、プロミスが解決されるまで実行が一時停止されます。 WebAssembly.Table-
WebAssembly のテーブルを表す配列風の構造で、多数の参照(英語)を保持します(関数の参照など)。
WebAssembly.Tag-
WebAssembly の例外の 1 つの型を表すオブジェクト。
WebAssembly.Exception-
WebAssembly/JavaScript の境界内および境界をまたいで、発生、捕捉、再発生させることが可能な WebAssembly の例外オブジェクト。
静的プロパティ
WebAssembly.JSTag-
JavaScript ホストで発生した例外を表す組み込みの
WebAssembly.Tag— これにより、JavaScript で発生した例外を Wasm モジュール内部から処理することができます。
静的メソッド
WebAssembly.compile()-
WebAssembly.Moduleを用いて WebAssembly バイナリーコードからコンパイルします。インスタンス化は別ステップとして分離されます。 WebAssembly.compileStreaming()-
ソースのストリームから直接
WebAssembly.Moduleにコンパイルします。インスタンス化は別ステップとして分離されます。 WebAssembly.instantiate()-
WebAssembly コードをコンパイル、インスタンス化するための主要な API で、
Moduleと、その最初のInstanceを返します。 WebAssembly.instantiateStreaming()-
ソースのストリームから直接 WebAssembly モジュールをコンパイル、インスタンス化し、
Moduleと、その最初のInstanceを返します。 WebAssembly.promising()-
非同期操作(つまり、
WebAssembly.Suspending()コンストラクターを使用して作成された、インポートされた一時停止関数)に依存するエクスポートされた Wasm 関数をラップし、それをPromiseに変換します。 WebAssembly.validate()-
WebAssembly バイナリーコードの型付き配列を検証し、バイト列が有効な WebAssembly コードか (
true) 否か (false) を返します。
例
>.wasm モジュールを読み込み、コンパイルし、インスタンス化する
次の例(GitHub 上の instantiate-streaming.html のデモと、動作例も参照)は、基礎となるソースから Wasm モジュールを直接ストリーミングし、コンパイルしてインスタンス化し、 ResultObject で履行されるプロミスを返します。 instantiateStreaming() 関数は Response オブジェクトのプロミスを受け付けるので、 fetch() の呼び出し結果を直接渡すと、履行されたときにレスポンスを関数に渡すことができます。
const importObject = {
my_namespace: { imported_func: (arg) => console.log(arg) },
};
WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
(obj) => obj.instance.exports.exported_func(),
);
それから ResultObject の instance メンバーにアクセスすると、呼び出し対象のエクスポートされた関数が入っています。
仕様書
| 仕様書 |
|---|
| WebAssembly JavaScript Interface> # webassembly-namespace> |