WebAssembly

これは実験段階の機能です。
この機能は複数のブラウザーで開発中の状態にあります。互換性テーブルをチェックしてください。また、実験段階の機能の構文と挙動は、仕様変更に伴い各ブラウザーの将来のバージョンで変更になる可能性があることに注意してください。

WebAssembly JavaScriptオブジェクトは全てのWebAssemblyに関連する機能の名前空間として振る舞います。

他のグローバルオブジェクトとは異なり、WebAssembly はコンストラクタではありません(関数オブジェクトではない)。数学定数、関数の名前空間であるMathや、国際化コンストラクタと他の言語に依存する関数のためのIntlと比較することができます。

概要

WebAssemblyオブジェクトの主な用途は次のとおりです:

メソッド

WebAssembly.instantiate()
WebAssemblyコードをコンパイル、インスタンス化するための主要なAPIで、 Module と、その最初の Instance を返します。
WebAssembly.compile()
WebAssembly.Moduleを用いてWebAssemblyバイナリコードからコンパイルします。インスタンス化は別ステップとして分離されます。
WebAssembly.validate()
WebAssemblyバイナリコードの型付き配列を検証し、バイト列が有効なWebAssemblyコードか(true)否か(false)を返します。

コンストラクタ

WebAssembly.Module()
新しいWebAssembly Module オブジェクトを生成します。
WebAssembly.Instance()
新しいWebAssembly Instance オブジェクトを生成します。
WebAssembly.Memory()
新しいWebAssembly Memory オブジェクトを生成します。
WebAssembly.Table()
新しいWebAssembly Table オブジェクトを生成します。
WebAssembly.CompileError()
新しいWebAssembly CompileError オブジェクトを生成します。
WebAssembly.LinkError()
新しいWebAssembly LinkError オブジェクトを生成します。
WebAssembly.RuntimeError()
新しいWebAssembly RuntimeError オブジェクトを生成します。

fetchを使用してWebAssemblyバイトコードをフェッチした後、WebAssembly.instantiate() 関数を使用してモジュールをコンパイル、インスタンス化します。その過程で、WebAssemblyモジュールにJavaScriptの関数をインポートします。このプロミスはModuleInstanceを含むオブジェクト(result)とともに解決されます。次に、InstanceからエクスポートされているエクスポートされたWebAssembly関数を呼び出します。

var importObject = {
  imports: {
    imported_func: function(arg) {
      console.log(arg);
    }
  }
};

fetch('simple.wasm').then(response =>
  response.arrayBuffer()
).then(bytes =>
  WebAssembly.instantiate(bytes, importObject)
).then(result =>
  result.instance.exports.exported_func()
);

: Github上の例(view it live also)のindex.htmlでは、我々で定義したfetchAndInstantiate()ライブラリ関数を使用しています。

仕様

Specification Status Comment
Web Assembly JavaScript API
WebAssembly の定義
ドラフト Initial draft definition.

ブラウザ実装状況

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 57 未サポート 52 (52)[1] 未サポート (有) 未サポート
Feature Chrome for Android Android Webview Edge Mobile Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support 57 57 未サポート 52.0 (52)[1] 未サポート 未サポート 未サポート

[1] WebAssemblyはFirefox 52+で有効です。Firefox 52 Extended Support Release (ESR.)では無効化されています。

参考情報

ドキュメントのタグと貢献者

 このページの貢献者: syu_kato
 最終更新者: syu_kato,