このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
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 と同様のものです。
In this article
概要
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> |