From ad9ea64ce997fb0bf4e8bef04605ec4b1cff1147 Mon Sep 17 00:00:00 2001
From: Masahiro FUJIMOTO もし wasm モジュールは一連の セクション で構成されています。これらのセクションのほとんどは wasm の仕様によって完全に指定、バリデーションされますが、バリデーション中に無視されスキップされる カスタムセクション をモジュールに含めることができます (通常のセクション("既知のセクション")とカスタムセクションを区別するための情報は 高レベルの構造 を読んでください)。 これにより開発者は他の目的のために wasm モジュール内にカスタムデータを含めることができます。例えば、開発者がモジュール内の全ての関数とローカル変数に名前を付けられる (ネイティブビルドにおける "シンボル" のようなもの) ネームカスタムセクション のようなものがあります 。 Note that the WebAssembly テキストフォーマットには現在新しいカスタムセクションのための構文の仕様がありません。しかし、テキストフォーマットから .wasm に変換するときに wasm にネームセクションを追加することができます。wabt tool の一部である wast2wasm コマンドで 次の例では(custom-section.html の ソース と 動作例 をご確認ください) 、ロードした section.wasm バイトコードをコンパイルしています。 それから、 {{Compat("javascript.builtins.WebAssembly.Module.customSections")}} 指定したモジュールのエクスポートされた関数を表現するオブジェクトの配列。 もしモジュールが {{jsxref("WebAssembly.Module")}} オブジェクトインスタンス出ない場合、{{jsxref("TypeError")}} がスローされます。 次の例では (Github のデモ index-compile.html と、動作例 もご確認ください) {{jsxref("WebAssembly.compile()")}} 関数を使用してロードした simple.wasm をコンパイルして、 postMessage() を使用してそれを worker に送信しています。 worker ( WebAssembly.customSections() 関数はモジュールと文字列名を指定して、全てのカスタムセクションのコンテンツのコピーを返します。構文
-
-var custSec = WebAssembly.Module.customSections(module, sectionName);
-
-パラメータ
-
-
-
-
-戻り値
-
-sectionName にマッチした全てのカスタムセクションの {{domxref("ArrayBuffer")}} コピーの配列 (もしかしたら空の場合もあります) 。例外
-
-module が {{jsxref("WebAssembly.Module")}} オブジェクトインスタンスでない場合、{{jsxref("TypeError")}} がスローされます。カスタムセクション
-
---debug-names オプションを指定することができます。これを指定することにより、ネームカスタムセクションを持つ .wasm に変換することができます:wast2wasm simple-name-section.was -o simple-name-section.wasm --debug-names
-
-例
-
-WebAssembly.Module.customSections を使用して length が0より大きいかチェックして、モジュールに "name" カスタムセクションが含まれているかどうかチェックします。この例では "name" カスタムセクションが存在するため、ArrayBuffer オブジェクトが返されます。fetch('simple-name-section.wasm').then(response =>
- response.arrayBuffer()
-).then(bytes =>
- WebAssembly.compile(bytes)
-).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]);
- };
-});
-
-仕様
-
-
-
-
-
-
-
-
-
- 仕様
- 策定状況
- コメント
-
-
-
-{{SpecName('WebAssembly JS', '#webassemblymodulecustomsections', 'customSections()')}}
- {{Spec2('WebAssembly JS')}}
- 初回ドラフト定義。
- ブラウザ実装状況
-
-関連情報
-
-
-
diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/module/customsections/index.md b/files/ja/web/javascript/reference/global_objects/webassembly/module/customsections/index.md
new file mode 100644
index 0000000000..401ddba03f
--- /dev/null
+++ b/files/ja/web/javascript/reference/global_objects/webassembly/module/customsections/index.md
@@ -0,0 +1,84 @@
+---
+title: WebAssembly.Module.customSections()
+slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections
+tags:
+ - API
+ - JavaScript
+ - Method
+ - Module
+ - Object
+ - Reference
+ - WebAssembly
+ - customSections
+browser-compat: javascript.builtins.WebAssembly.Module.customSections
+translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections
+---
+{{JSRef}}
+
+**`WebAssembly.customSections()`** 関数はモジュールと文字列名を指定して、すべてのカスタムセクションのコンテンツのコピーを返します。
+
+## 構文
+
+```js
+WebAssembly.Module.customSections(module, sectionName)
+```
+
+### 引数
+
+- _module_
+ - : カスタムセクションを考慮する {{jsxref("WebAssembly.Module")}} オブジェクト。
+- _sectionName_
+ - : 目的のカスタムセクションの文字列名。
+
+### 返値
+
+`sectionName` に一致するすべてのカスタムセクションの {{jsxref("ArrayBuffer")}} コピーの配列 (空の場合もあります)。
+
+### 例外
+
+`module` が {{jsxref("WebAssembly.Module")}} オブジェクトのインスタンスでない場合、{{jsxref("TypeError")}} が発生します。
+
+## 解説
+
+wasm モジュールは一連の **セクション** で構成されています。これらのセクションのほとんどは wasm の仕様によって完全に指定、検証されますが、検証中に無視されスキップされる **カスタムセクション** をモジュールに含めることができます (通常のセクション ("既知のセクション") とカスタムセクションを区別するための情報は [高レベルの構造](https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#high-level-structure) を読んでください)。
+
+これにより開発者は他の目的のために wasm モジュール内にカスタムデータを含めることができます。例えば、開発者がモジュール内の全ての関数とローカル変数に名前を付けられる (ネイティブビルドにおける "シンボル" のようなもの) [ネームカスタムセクション](https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#name-section) のようなものがあります 。
+
+なお、 WebAssembly テキストフォーマットには現在新しいカスタムセクションのための構文の仕様がありません。しかし、テキストフォーマットから .wasm に変換するときに wasm にネームセクションを追加することができます。 [wabt tool](https://github.com/webassembly/wabt) の一部である wast2wasm コマンドで `--debug-names` オプションを指定することができ、これを指定することにより、ネームカスタムセクションを持つ .wasm に変換することができます。
+
+```bash
+wast2wasm simple-name-section.was -o simple-name-section.wasm --debug-names
+```
+
+## 例
+
+### customSections の使用
+
+次の例では (custom-section.html の[ソース](https://github.com/mdn/webassembly-examples/blob/master/other-examples/custom-section.html)と[動作例](https://mdn.github.io/webassembly-examples/other-examples/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]);
+ };
+});
+```
+
+## 仕様書
+
+{{Specifications}}
+
+## ブラウザーの互換性
+
+{{Compat}}
+
+## 関連情報
+
+- [WebAssembly](/ja/docs/WebAssembly) 概要ページ
+- [WebAssembly の概念](/ja/docs/WebAssembly/Concepts)
+- [WebAssembly JavaScript API の使用](/ja/docs/WebAssembly/Using_the_JavaScript_API)
diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/module/exports/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/module/exports/index.html
deleted file mode 100644
index fb852a1a29..0000000000
--- a/files/ja/web/javascript/reference/global_objects/webassembly/module/exports/index.html
+++ /dev/null
@@ -1,109 +0,0 @@
----
-title: WebAssembly.Module.exports()
-slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports
-tags:
- - API
- - Constructor
- - Experimental
- - JavaScript
- - Method
- - Module
- - Object
- - Reference
- - WebAssembly
- - exports
-translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports
----
-WebAssembly.exports() 関数は指定した Module のエクスポート宣言の定義の配列を返します。構文
-
-var exports = WebAssembly.Module.exports(module);
-
-パラメータ
-
-
-
-
-戻り値
-
-例外
-
-例
-
-var worker = new Worker("wasm_worker.js");
-
-fetch('simple.wasm').then(response =>
- response.arrayBuffer()
-).then(bytes =>
- WebAssembly.compile(bytes)
-).then(mod =>
- worker.postMessage(mod)
-);
-
-wasm_worker.js を参照) 内で、モジュールで使用するためにインポートオブジェクトを定義して、そのあとにメインスレッドからモジュールを受け取るためのイベントハンドラをセットアップします。モジュールを受け取ったとき、{{jsxref("WebAssembly.Instantiate()")}} メソッドを使用してインスタンスを生成し、その内部でエクスポートされた関数を実行します。そのあとに WebAssembly.Module.exports を使用してモジュール上の利用可能なエクスポートの情報を返す方法を示します。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] のアウトプットはこのようになります:{ name: "exported_func", kind: "function" }
-
-仕様
-
-
-
-
-
-
-
-
-
- 仕様
- 策定状況
- コメント
-
-
-
-{{SpecName('WebAssembly JS', '#webassemblymoduleexports', 'exports()')}}
- {{Spec2('WebAssembly JS')}}
- Initial draft definition.
- ブラウザ実装状況
-
-関連情報
-
-
-
diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/module/exports/index.md b/files/ja/web/javascript/reference/global_objects/webassembly/module/exports/index.md
new file mode 100644
index 0000000000..a9a33494b3
--- /dev/null
+++ b/files/ja/web/javascript/reference/global_objects/webassembly/module/exports/index.md
@@ -0,0 +1,96 @@
+---
+title: WebAssembly.Module.exports()
+slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports
+tags:
+ - API
+ - JavaScript
+ - Method
+ - Module
+ - Object
+ - Reference
+ - WebAssembly
+ - exports
+browser-compat: javascript.builtins.WebAssembly.Module.exports
+translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/exports
+---
+{{JSRef}}
+
+**`WebAssembly.Module.exports()`** 関数は、指定された `Module` のエクスポート宣言の定義の配列を返します。
+
+## 構文
+
+```js
+WebAssembly.Module.exports(module)
+```
+
+### 引数
+
+- _module_
+ - : {{jsxref("WebAssembly.Module")}} オブジェクトです。
+
+### 返値
+
+指定したモジュールのエクスポートされた関数を表現するオブジェクトの配列です。
+
+### 例外
+
+モジュールが {{jsxref("WebAssembly.Module")}} オブジェクトのインスタンスではない場合、{{jsxref("TypeError")}} が発生します。
+
+## 例
+
+### exports の使用
+
+次の例 (Github のデモ [index-compile.html](https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/index-compile.html) と、[動作例](https://mdn.github.io/webassembly-examples/js-api-examples/index-compile.html)も参照) では、{{jsxref("WebAssembly.compileStreaming()")}} 関数を使用して読み込んだ simple.wasm のバイトコードをコンパイルして、[ワーカー](/ja/docs/Web/API/Web_Workers_API)に [postMessage()](/ja/docs/Web/API/Worker/postMessage) を使用して送信しています。
WebAssembly.imports() 関数は、指定した Module の全てのインポート宣言の定義を配列として返します。
WebAssembly.Module.imports(module);- -
指定したモジュールのインポートされた関数を表現するオブジェクトの配列。
- -もしモジュールが {{jsxref("WebAssembly.Module")}} オブジェクトのインスタンスでなければ {{jsxref("TypeError")}} が発生します。
- -次の例では (imports.html の ソースコード と 動作例 もご確認ください) ロードした simple.wasm モジュールをコンパイルした後、インポート宣言を問い合わせています。
- -WebAssembly.compileStreaming(fetch('simple.wasm'))
-.then(function(mod) {
- var imports = WebAssembly.Module.imports(mod);
- console.log(imports[0]);
-});
-
-
-出力結果は次のようになります。
- -{ module: "imports", name: "imported_func", kind: "function" }
-
-| 仕様書 | -
|---|
| {{SpecName('WebAssembly JS', '#dom-module-imports', 'imports()')}} | -
{{Compat("javascript.builtins.WebAssembly.Module.imports")}}
-WebAssembly.Module オブジェクトには、ブラウザーでコンパイルされたステートレスな WebAssembly コードが含まれています。これを効率的にワーカー間で共有したり、複数回インスタンス化したりすることができます。
Module オブジェクトを生成します。Module と文字列を指定すると、モジュール内の与えられた文字列を名前に持つ全てのカスタムセクションの内容を返します。Module を指定すると、エクスポート宣言の情報を配列として返します。Module を指定すると、インポート宣言の情報を配列として返します。以下の例では (GitHub 上の index-compile.html およびライブ表示も参照してください)、読み込まれた simple.wasm のバイトコードを {{jsxref("WebAssembly.compileStreaming()")}} メソッドでコンパイルし、結果の Module インスタンスをワーカーへ、 {{domxref("Worker/postMessage", "postMessage()")}} を使用して送信します。
var worker = new Worker("wasm_worker.js");
-
-WebAssembly.compileStreaming(fetch('simple.wasm'))
-.then(mod =>
- worker.postMessage(mod)
-);
-
-ワーカー内では (wasm_worker.js を参照)、モジュールを使用するための import オブジェクトを定義し、メインスレッドからモジュールを受け取るためのイベントハンドラーをセットアップします。モジュールを受け取ったら、 {{jsxref("WebAssembly.instantiate()")}} メソッドを使ってインスタンスを作成し、その中からエクスポートされた関数を呼び出します。
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();
- });
-};
-
-| 仕様書 | -
|---|
| {{SpecName('WebAssembly JS', '#modules', 'WebAssembly.Module()')}} | -
{{Compat("javascript.builtins.WebAssembly.Module")}}
-