recursal/MDN huggingface dataset:
WebAssembly.compile()
=====================

**`WebAssembly.compile()`** 関数は WebAssembly バイナリーコードを `WebAssembly.Module` の形にコンパイルします。この関数は、モジュールをインスタンス化する前にコンパイルする必要がある場合に便利です (それ以外の場合は、 `WebAssembly.instantiate()` 関数を使用してください)。

構文
--


```js
WebAssembly.compile(bufferSource);
```

### 引数

*bufferSource*

コンパイルする .wasm モジュールのバイナリーコードを含む型付き配列または `ArrayBuffer` です。

### 返値

コンパイルされたモジュールを表す `WebAssembly.Module` オブジェクトに解決する `Promise` です。

### 例外

* `bufferSource` が型付き配列ではなかった場合、 `TypeError` が発生します。
* コンパイルに失敗した場合、プロミスは `WebAssembly.CompileError` で拒否されます。
例
-

### compile の使用

次の例では、読み込まれた simple.wasm バイトコードを、 `compile()` 関数を使用してコンパイルし、ワーカーに postMessage() を用いて送信します。


```js
var worker = new Worker("wasm\_worker.js");

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => WebAssembly.compile(bytes))
  .then((mod) => worker.postMessage(mod));
```


**メモ:** おそらく多くの場合は `WebAssembly.compileStreaming()` を使用したほうが `compile()` よりも効率的なのでそちらの方がいいでしょう。

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # dom-webassembly-compile |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.instantiateStreaming()
==================================

**`WebAssembly.instantiateStreaming()`** 関数は、ソースのストリームから直接 WebAssembly モジュールをコンパイルしてインスタンス化します。これは、 wasm コードをロードするための最も効率的で最適な方法です。

**メモ:** 厳格なコンテンツセキュリティポリシー (CSP) のあるウェブページでは、 WebAssembly のコンパイルやモジュールの実行がブロックされることがあります。
 WebAssembly のコンパイルと実行を許可することについての詳しい情報は、 CSP の script-src を参照してください。


構文
--


```js
WebAssembly.instantiateStreaming(source, importObject)
```

### 引数

`source`

`Response` オブジェクト、またはそれで解決するプロミスで、コンパイルしてインスタンス化する .wasm モジュールのソースを表します。

`importObject` 省略可

関数や `WebAssembly.Memory` オブジェクトなど、新しく生成される `Instance` にインポートされる値を持つオブジェクト。コンパイルされたモジュールの宣言されたインポートそれぞれに対応するプロパティが存在する必要があります。そうでない場合、`WebAssembly.LinkError` が発生します。

### 返値

`Promise` で、次の 2 つのフィールドを持つ `ResultObject` で解決します。

* `module`: コンパイルされた `WebAssembly.Module` オブジェクト。この `Module` は再度インスタンス化することや、postMessage() 経由で共有することができます。
* `instance`: `WebAssembly.Instance` オブジェクトで、すべてのエクスポートされた WebAssembly 関数を含みます。
### 例外

* いずれかの引数が正しい型または構造でない場合、`TypeError` が発生します。
* 失敗した場合、プロミスは失敗の原因に応じて `WebAssembly.CompileError`、`WebAssembly.LinkError`、`WebAssembly.RuntimeError` をもって拒否されます。
例
-

### ストリーミングのインスタンス化

次の例 (Github上のデモ instantiate-streaming.html と、動作例を参照してください) では、ソースから .wasm モジュールを直接コンパイルしてインスタンス化しています。このプロミスは `ResultObject` で履行されます。 `instantiateStreaming()` 関数は `Response` オブジェクトに解決するプロミスを受け取るので、直接 `fetch()` の呼び出し結果を渡すことができます。


```js
const importObject = { imports: { imported\_func: (arg) => console.log(arg) } };

WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
  (obj) => obj.instance.exports.exported\_func(),
);
```


最後に `ResultObject` が持つ instance メンバーにアクセスして、エクスポートされた関数を実行しています。

**メモ:** これを動作するようにするには、サーバが `.wasm` ファイルを `application/wasm` の MIME タイプで返す必要があります。

仕様書
---

| Specification |
| --- |
| WebAssembly Web API # dom-webassembly-instantiatestreaming |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.RuntimeError
========================

**`WebAssembly.RuntimeError`** オブジェクトは、 WebAssembly がトラップを指定するたびに例外として発生するエラー型です。

コンストラクター
--------

`WebAssembly.RuntimeError()`

新しい `WebAssembly.RuntimeError` オブジェクトを生成します。

インスタンスプロパティ
-----------

`WebAssembly.RuntimeError.prototype.message`

エラーメッセージ。 `Error` から継承しています。

`WebAssembly.RuntimeError.prototype.name`

エラー名。 `Error` から継承しています。

`WebAssembly.RuntimeError.prototype.fileName`

このエラーを発生させたファイルのパス。 `Error` から継承しています。

`WebAssembly.RuntimeError.prototype.lineNumber`

このエラーを発生させたファイルの行番号。 `Error` から継承しています。

`WebAssembly.RuntimeError.prototype.columnNumber`

このエラーが発生した行の列番号。 `Error` から継承しています。

`WebAssembly.RuntimeError.prototype.stack`

スタックトレース。 `Error` から継承しています。

インスタンスメソッド
----------

`WebAssembly.RuntimeError.prototype.toSource()`

同じエラーを評価できるコードを返します。 `Error` から継承しています。

`WebAssembly.RuntimeError.prototype.toString()`

指定された `Error` オブジェクトを表す文字列を返します。`Error` から継承しています。

例
-

### 新しい RuntimeError のインスタンスの作成

以下のスニペットでは、新しい `RuntimeError` インスタンスを生成して、詳細をコンソールに記録します。


```js
try {
  throw new WebAssembly.RuntimeError("Hello", "someFile", 10);
} catch (e) {
  console.log(e instanceof WebAssembly.RuntimeError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "RuntimeError"
  console.log(e.fileName); // "someFile"
  console.log(e.lineNumber); // 10
  console.log(e.columnNumber); // 0
  console.log(e.stack); // コードが実行されていた位置を返す
}
```

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # exceptiondef-runtimeerror |
| ECMAScript Language Specification # sec-native-error-types-used-in-this-standard |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.Instance
====================

**`WebAssembly.Instance`** オブジェクトは、ステートフルで実行可能な `WebAssembly.Module` のインスタンスです。 `Instance` オブジェクトには JavaScript から WebAssembly コードを呼び出すことができるすべてのエクスポートされた WebAssembly 関数が含まれます。

コンストラクター
--------

`WebAssembly.Instance()`

新しい `Instance` オブジェクトを生成します。

インスタンスプロパティ
-----------

`Instance.prototype.exports`

メンバーとして WebAssembly モジュールのインスタンスからエクスポートされたすべての関数を含むオブジェクトを返します。 JavaScript からアクセスしたり使用したりすることができます。読み取り専用です。

例
-

### WebAssembly モジュールの同期的なインスタンス化

`WebAssembly.Instance()` コンストラクター関数は、次のように呼び出して指定された `WebAssembly.Module` オブジェクトを同期的にインスタンス化することができます。


```js
const importObject = {
  imports: {
    imported\_func: function (arg) {
      console.log(arg);
    },
  },
};

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => {
    let mod = new WebAssembly.Module(bytes);
    let instance = new WebAssembly.Instance(mod, importObject);
    instance.exports.exported\_func();
  });
```


`Instance` を取得するには非同期で行うことを推奨します。例えば、 `WebAssembly.instantiateStreaming()` 関数を使って次のようにします。


```js
const importObject = {
  imports: {
    imported\_func: function (arg) {
      console.log(arg);
    },
  },
};

WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
  (obj) => obj.instance.exports.exported\_func(),
);
```


また、これは `exports` プロパティを使ってエクスポートされた関数にアクセスする方法も紹介しています。

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # instances |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.Module
==================

**`WebAssembly.Module`** オブジェクトには、ブラウザーでコンパイルされたステートレスな WebAssembly コードが含まれています。これを効率的にワーカー間で共有したり、複数回インスタンス化したりすることができます。

コンストラクター
--------

`WebAssembly.Module()`

新しい `Module` オブジェクトを生成します。

静的プロパティ
-------

`WebAssembly.Module.customSections()`

`Module` と文字列を指定すると、モジュール内の与えられた文字列を名前に持つすべてのカスタムセクションの内容を返します。

`WebAssembly.Module.exports()`

`Module` を指定すると、エクスポート宣言の情報を配列として返します。

`WebAssembly.Module.imports()`

`Module` を指定すると、インポート宣言の情報を配列として返します。

例
-

### コンパイル済みのモジュールをワーカーに送信

以下の例では (GitHub 上の index-compile.html および実行例も参照)、読み込まれた `simple.wasm` のバイトコードを `WebAssembly.compileStreaming()` メソッドでコンパイルし、結果の `Module` インスタンスをワーカーへ、 `postMessage()` を使用して送信します。


```js
var worker = new Worker("wasm\_worker.js");

WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) =>
  worker.postMessage(mod),
);
```


ワーカー内では (`wasm_worker.js` を参照)、モジュールを使用するための import オブジェクトを定義し、メインスレッドからモジュールを受け取るためのイベントハンドラーをセットアップします。モジュールを受け取ったら、 `WebAssembly.instantiate()` メソッドを使ってインスタンスを作成し、その中からエクスポートされた関数を呼び出します。


```js
var importObject = {
  imports: {
    imported\_func: function (arg) {
      console.log(arg);
    },
  },
};

onmessage = function (e) {
  console.log("module received from main thread");
  var mod = e.data;

  WebAssembly.instantiate(mod, importObject).then(function (instance) {
    instance.exports.exported\_func();
  });
};
```

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # modules |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.Global
==================

**`WebAssembly.Global`** はグローバル変数のインスタンスを表します。JavaScript からアクセスでき、1 つ以上の `WebAssembly.Module` インスタンス間でインポート/エクスポートすることができます。これにより複数のモジュールを動的にリンクすることができます。

コンストラクター
--------

`WebAssembly.Global()`

新しい `Global` オブジェクトを生成します。

Global のインスタンス
--------------

すべての `Global` のインスタンスは `Global()` コンストラクターのプロパティオブジェクトを継承します。これによりすべての `Global` インスタンスを変更することができます。

### インスタンスプロパティ

`Global.prototype.constructor`

このオブジェクトのインスタンスを生成した関数を返します。既定では、これは `WebAssembly.Global()` コンストラクターです。

`Global.prototype[@@toStringTag]`

@@toStringTag プロパティの初期値で、文字列値 "WebAssembly.Global" です。

`Global.prototype.value`

グローバル変数の中に含まれている値です。これにより、グローバル値を直接設定および取得することができます。

### インスタンスメソッド

`Global.prototype.valueOf()`

グローバル変数の中に含まれている値を返す古い形のメソッドです。

例
-

### 新しい Global インスタンスの生成

以下の例では新しいグローバルインスタンスは `WebAssembly.Global()` コンストラクターを用いて初期化され、初期値 0 の変更可能な `i32` 型として定義されます。

その後この値は、`Global.value` プロパティを使うことによって `42` に、`global.wasm` モジュールから公開された（どんな値が与えられても 1 を加算して、新しい値を返す）`incGlobal()` 関数を使うことによって `43` になります。


```js
const output = document.getElementById("output");

function assertEq(msg, got, expected) {
  const result =
    got === expected
      ? `SUCCESS! Got: ${got}<br>`
      : `FAIL!<br>Got: ${got}<br>Expected: ${expected}<br>`;
  output.innerHTML += `Testing ${msg}: ${result}`;
}

assertEq("WebAssembly.Global exists", typeof WebAssembly.Global, "function");

const global = new WebAssembly.Global({ value: "i32", mutable: true }, 0);

WebAssembly.instantiateStreaming(fetch("global.wasm"), { js: { global } }).then(
  ({ instance }) => {
    assertEq(
      "getting initial value from wasm",
      instance.exports.getGlobal(),
      0,
    );
    global.value = 42;
    assertEq(
      "getting JS-updated value from wasm",
      instance.exports.getGlobal(),
      42,
    );
    instance.exports.incGlobal();
    assertEq("getting wasm-updated value from JS", global.value, 43);
  },
);
```


**メモ:** この例はGitHub 上の実行例で確認できます。また、ソースコードも参照してください。

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # globals |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概要
* WebAssembly JavaScript API の使用
* Import/Export mutable globals proposal
WebAssembly.LinkError
=====================

**`WebAssembly.RuntimeLinkError`** オブジェクトは、モジュールのインスタンス化の際に発生したエラーを示します (開始した関数でのトラップを除く)。

コンストラクター
--------

`WebAssembly.LinkError()`

新しい `WebAssembly.LinkError` オブジェクトを生成します。

インスタンスプロパティ
-----------

`WebAssembly.LinkError.prototype.message`

エラーメッセージ。 `Error` から継承しています。

`WebAssembly.LinkError.prototype.name`

エラー名。 `Error` から継承しています。

`WebAssembly.LinkError.prototype.fileName`

このエラーを発生させたファイルのパス。 `Error` から継承しています。

`WebAssembly.LinkError.prototype.lineNumber`

このエラーを発生させたファイルの行番号。 `Error` から継承しています。

`WebAssembly.LinkError.prototype.columnNumber`

このエラーが発生した行の列番号。 `Error` から継承しています。

`WebAssembly.LinkError.prototype.stack`

スタックトレース。 `Error` から継承しています。

インスタンスメソッド
----------

`WebAssembly.LinkError.prototype.toSource()`

同じエラーを評価できるコードを返します。 `Error` から継承しています。

`WebAssembly.LinkError.prototype.toString()`

指定された `Error` オブジェクトを表す文字列を返します。`Error` から継承しています。

例
-

### 新しい LinkError のインスタンスの作成

以下のスニペットでは、新しい `LinkError` インスタンスを生成して、詳細をコンソールに記録します。


```js
try {
  throw new WebAssembly.LinkError("Hello", "someFile", 10);
} catch (e) {
  console.log(e instanceof LinkError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "LinkError"
  console.log(e.fileName); // "someFile"
  console.log(e.lineNumber); // 10
  console.log(e.columnNumber); // 0
  console.log(e.stack); // コードが実行されていた位置を返す
}
```

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # exceptiondef-linkerror |
| ECMAScript Language Specification # sec-native-error-types-used-in-this-standard |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.Memory()
====================

**`WebAssembly.Memory`** オブジェクトはサイズ変更可能な `ArrayBuffer` または `SharedArrayBuffer` であり、 WebAssembly `Instance` からアクセスする生のバイト列のメモリーを持ちます。

JavaScript または WebAssembly コードから生成されたメモリーは JavaScript と WebAssembly のどちらからもアクセス、変更が可能になります。

コンストラクター
--------

`WebAssembly.Memory()`

新しい `Memory` オブジェクトを生成します。

インスタンスプロパティ
-----------

`Memory.prototype.buffer`

メモリーに格納されているバッファーを返すアクセサープロパティです。

インスタンスメソッド
----------

`Memory.prototype.grow()`

指定した WebAssembly ページ (64KB で 1 単位) の数でメモリーのインスタンスのサイズを増やします。

例
-

### 新しい Memory オブジェクトの生成

`WebAssembly.Memory` オブジェクトを取得する方法は 2 つあります。 1 つ目は JavaScript から生成する方法です。以下の例では、初期サイズが 10 ページ (640KiB) 、最大サイズが 100 ページ (6.4MiB) で新しい WebAssembly Memory インスタンスを生成しています。その `buffer` プロパティは `ArrayBuffer` を返します。


```js
var memory = new WebAssembly.Memory({ initial: 10, maximum: 100 });
```


次の例では (GitHub 上の memory.html および実行例も参照)、 memory.wasm バイトコードを `WebAssembly.instantiateStreaming()` メソッドを使用して読み込みんでインスタンス化し、その上の行で生成されたメモリにインポートします。それから、メモリにいくつかの値を格納し、関数をエクスポートして使用し、いくつかの値を合計します。


```js
WebAssembly.instantiateStreaming(fetch("memory.wasm"), {
  js: { mem: memory },
}).then((obj) => {
  var i32 = new Uint32Array(memory.buffer);
  for (var i = 0; i < 10; i++) {
    i32[i] = i;
  }
  var sum = obj.instance.exports.accumulate(0, 10);
  console.log(sum);
});
```


WebAssembly.Memory オブジェクトを取得する 2 つ目の方法は、 WebAssembly モジュールによってエクスポートされることです。このメモリは WebAssembly インスタンスの `exports` プロパティで (メモリーが WebAssembly モジュール内でエクスポートされた後に) アクセスできます。次のスニペットは、 WebAssembly からエクスポートされたメモリを `memory`という名前でインポートし、メモリーの最初の要素を Uint32Array として解釈して表示しています。


```js
WebAssembly.instantiateStreaming(fetch("memory.wasm")).then((obj) => {
  var i32 = new Uint32Array(obj.instance.exports.memory.buffer);
  console.log(i32[0]);
});
```

### 共有メモリーの作成

 既定では、 WebAssembly のメモリーは共有されていません。共有メモリーを作成するには、コンストラクター
 の初期化オブジェクトに `shared: true` を渡します。


```js
let memory = new WebAssembly.Memory({
  initial: 10,
  maximum: 100,
  shared: true,
});
```


このメモリーの `buffer` プロパティは `SharedArrayBuffer` を返します。

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # memories |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.LinkError() コンストラクター
================================

**`WebAssembly.LinkError()`** コンストラクターは、新しい WebAssembly `LinkError` オブジェクトを生成します。これは、 (関数開始後のトラップではなく) モジュールがインスタンス化される間に発生したエラーを発生します。

構文
--


```js
new WebAssembly.LinkError();
new WebAssembly.LinkError(message);
new WebAssembly.LinkError(message, fileName);
new WebAssembly.LinkError(message, fileName, lineNumber);
```

### 引数

`message` 省略可

人間が読めるエラーの説明です。

`fileName` 省略可

例外が発生したコードを含むファイル名です。

`lineNumber` 省略可

例外が発生したコードの行番号です。

例
-

### 新しい LinkError のインスタンスの生成

以下のスニペットは新しい `LinkError` のインスタンスを生成し、コンソールに詳細を記録します。


```js
try {
  throw new WebAssembly.LinkError("Hello", "someFile", 10);
} catch (e) {
  console.log(e instanceof WebAssembly.LinkError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "LinkError"
  console.log(e.fileName); // "someFile"
  console.log(e.lineNumber); // 10
  console.log(e.columnNumber); // 0
  console.log(e.stack); // コードの実行されていた位置を返す
}
```

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # exceptiondef-linkerror |
| ECMAScript Language Specification # sec-nativeerror-constructors |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.CompileError() コンストラクター
===================================

**`WebAssembly.CompileError()`** コンストラクターは、新しい WebAssembly の `CompileError` オブジェクトを生成します。これは WebAssembly のデコードまたは検証中のエラーを示します。

構文
--


```js
new WebAssembly.CompileError();
new WebAssembly.CompileError(message);
new WebAssembly.CompileError(message, fileName);
new WebAssembly.CompileError(message, fileName, lineNumber);
```

### 引数

`message` 省略可

このエラーの人間が読める説明です。

`fileName` 省略可

例外が発生したコードを含むファイル名です。

`lineNumber` 省略可

例外が発生したコードの行番号です。

例
-

### 新しい CompileError インスタンスの生成

以下のスニペットは新しい `CompileError` のインスタンスを生成し、コンソールに詳細を記録します。


```js
try {
  throw new WebAssembly.CompileError("Hello", "someFile", 10);
} catch (e) {
  console.log(e instanceof CompileError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "CompileError"
  console.log(e.fileName); // "someFile"
  console.log(e.lineNumber); // 10
  console.log(e.columnNumber); // 0
  console.log(e.stack); // コードの実行されていた位置を返す
}
```

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # exceptiondef-compileerror |
| ECMAScript Language Specification # sec-nativeerror-constructors |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.RuntimeError() コンストラクター
===================================

**`WebAssembly.RuntimeError()`** コンストラクターは、新しい WebAssembly `RuntimeError` オブジェクトを生成します。これは、 WebAssembly がトラップを指定するたびに例外として発生する型です。

構文
--


```js
new WebAssembly.RuntimeError();
new WebAssembly.RuntimeError(message);
new WebAssembly.RuntimeError(message, fileName);
new WebAssembly.RuntimeError(message, fileName, lineNumber);
```

### 引数

`message` 省略可

人間が読めるエラーの説明です。

`fileName` 省略可

例外が発生したコードを含むファイル名です。

`lineNumber` 省略可

例外が発生したコードの行番号です。

例
-

### 新しい RuntimeError のインスタンスの生成

以下のスニペットは新しい `RuntimeError` のインスタンスを生成し、コンソールに詳細を記録します。


```js
try {
  throw new WebAssembly.RuntimeError("Hello", "someFile", 10);
} catch (e) {
  console.log(e instanceof WebAssembly.RuntimeError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "RuntimeError"
  console.log(e.fileName); // "someFile"
  console.log(e.lineNumber); // 10
  console.log(e.columnNumber); // 0
  console.log(e.stack); // コードの実行されていた位置を返す
}
```

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # exceptiondef-runtimeerror |
| ECMAScript Language Specification # sec-nativeerror-constructors |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.Module.customSections()
===================================

**`WebAssembly.customSections()`** 関数はモジュールと文字列名を指定して、すべてのカスタムセクションのコンテンツのコピーを返します。

構文
--


```js
WebAssembly.Module.customSections(module, sectionName);
```

### 引数

*module*

カスタムセクションを考慮する `WebAssembly.Module` オブジェクト。

*sectionName*

目的のカスタムセクションの文字列名。

### 返値

`sectionName` に一致するすべてのカスタムセクションの `ArrayBuffer` コピーの配列 (空の場合もあります)。

### 例外

`module` が `WebAssembly.Module` オブジェクトのインスタンスでない場合、`TypeError` が発生します。

解説
--

wasm モジュールは一連の **セクション** で構成されています。これらのセクションのほとんどは wasm の仕様によって完全に指定、検証されますが、検証中に無視されスキップされる **カスタムセクション** をモジュールに含めることができます (通常のセクション ("既知のセクション") とカスタムセクションを区別するための情報は 高レベルの構造 を読んでください)。

これにより開発者は他の目的のために wasm モジュール内にカスタムデータを含めることができます。例えば、開発者がモジュール内の全ての関数とローカル変数に名前を付けられる (ネイティブビルドにおける "シンボル" のようなもの) ネームカスタムセクション のようなものがあります 。

なお、 WebAssembly テキストフォーマットには現在新しいカスタムセクションのための構文の仕様がありません。しかし、テキストフォーマットから .wasm に変換するときに wasm にネームセクションを追加することができます。 wabt tool の一部である wast2wasm コマンドで `--debug-names` オプションを指定することができ、これを指定することにより、ネームカスタムセクションを持つ .wasm に変換することができます。


```bash
wast2wasm simple-name-section.was -o simple-name-section.wasm --debug-names
```

例
-

### customSections の使用

次の例では (custom-section.html のソースと動作例をご確認ください) 、読み込んだ section.wasm バイトコードをコンパイルします。

それから、`WebAssembly.Module.customSections` を使用して `length` が 0 より大きいかチェックして、モジュールに "name" カスタムセクションが含まれているかどうかチェックします。この例では "name" カスタムセクションが存在するため、`ArrayBuffer` オブジェクトが返されます。


```js
WebAssembly.compileStreaming(fetch("simple-name-section.wasm")).then(
  function (mod) {
    var nameSections = WebAssembly.Module.customSections(mod, "name");
    if (nameSections.length != 0) {
      console.log("Module contains a name section");
      console.log(nameSections[0]);
    }
  },
);
```

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # dom-module-customsections |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.Module.exports()
============================

**`WebAssembly.Module.exports()`** 関数は、指定された `Module` のエクスポート宣言の定義の配列を返します。

構文
--


```js
WebAssembly.Module.exports(module);
```

### 引数

*module*

`WebAssembly.Module` オブジェクトです。

### 返値

指定したモジュールのエクスポートされた関数を表現するオブジェクトの配列です。

### 例外

モジュールが `WebAssembly.Module` オブジェクトのインスタンスではない場合、`TypeError` が発生します。

例
-

### exports の使用

次の例 (Github のデモ index-compile.html と、動作例も参照) では、`WebAssembly.compileStreaming()` 関数を使用して読み込んだ simple.wasm のバイトコードをコンパイルして、ワーカーに postMessage() を使用して送信しています。


```js
var worker = new Worker("wasm\_worker.js");

WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) =>
  worker.postMessage(mod),
);
```


ワーカー (`wasm_worker.js` を参照) 内で、モジュールで使用するためにインポートオブジェクトを定義して、そのあとにメインスレッドからモジュールを受け取るためのイベントハンドラをセットアップします。モジュールを受け取ったとき、`WebAssembly.Instantiate()` メソッドを使用してインスタンスを生成し、その内部でエクスポートされた関数を実行します。そのあとに `WebAssembly.Module.exports` を使用してモジュール上の利用可能なエクスポートの情報を返す方法を示します。


```js
var importObject = {
  imports: {
    imported\_func: function (arg) {
      console.log(arg);
    },
  },
};

onmessage = function (e) {
  console.log("module received from main thread");
  var mod = e.data;

  WebAssembly.instantiate(mod, importObject).then(function (instance) {
    instance.exports.exported\_func();
  });

  var exports = WebAssembly.Module.exports(mod);
  console.log(exports[0]);
};
```


`exports[0]` の出力はこのようになります。


```js
{ name: "exported\_func", kind: "function" }
```

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # dom-module-exports |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用
WebAssembly.Module() コンストラクター
=============================

**`WebAssembly.Module()`** コンストラクターは、ステートレスな WebAssembly コードを含む新しい Module オブジェクトを生成します。これはブラウザーでコンパイルされ、Worker と効率的に共有することができ、複数回インスタンス化することができます。

`WebAssembly.Module()` コンストラクター関数は、与えられた WebAssembly バイナリーコードを同期的にコンパイルするために呼び出すことができます。しかし、`Module` を取得するには、
 `WebAssembly.compile()` のような非同期コンパイル関数を使用するほうが主流です。

構文
--

**警告:** 大きなモジュールのコンパイルにはコストがかかるため、開発者はどうしても同期コンパイルが必要な場合にのみ `Module()` コンストラクターを使用し、それ以外の場合には非同期の `WebAssembly.compileStreaming()` メソッドを使用してください。


```js
new WebAssembly.Module(bufferSource);
```

### 引数

*bufferSource*

型付き配列または ArrayBuffer で、コンパイルしたい .wasm モジュールのバイナリーコードです。

例
-

### WebAssembly モジュールの同期的なコンパイル


```js
var importObject = {
  imports: {
    imported\_func: function (arg) {
      console.log(arg);
    },
  },
};

function createWasmModule(bytes) {
  return new WebAssembly.Module(bytes);
}

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => {
    let mod = createWasmModule(bytes);
    WebAssembly.instantiate(mod, importObject).then((result) =>
      result.exports.exported\_func(),
    );
  });
```

仕様書
---

| Specification |
| --- |
| WebAssembly JavaScript Interface # dom-module-module |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* WebAssembly 概要ページ
* WebAssembly の概念
* WebAssembly JavaScript API の使用