diff options
Diffstat (limited to 'files/ja/web/javascript/reference/global_objects/webassembly')
30 files changed, 2774 insertions, 0 deletions
diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/compile/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/compile/index.html new file mode 100644 index 0000000000..1cdf19f657 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/compile/index.html @@ -0,0 +1,97 @@ +--- +title: WebAssembly.compile() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p><strong><code>WebAssembly.compile()</code></strong> 関数は WebAssembly バイナリコードから {{jsxref("WebAssembly.Module")}} にコンパイルします。この関数はモジュールをインスタンス化する前にコンパイルする必要がある時に便利です。(そうでなければ、 {{jsxref("WebAssembly.instantiate()")}} 関数の使用が推奨されます。</p> + +<h2 id="構文">構文</h2> + +<pre class="syntaxbox">Promise<WebAssembly.Module> WebAssembly.compile(bufferSource);</pre> + +<h3 id="パラメータ">パラメータ</h3> + +<dl> + <dt><em>bufferSource</em></dt> + <dd>コンパイルする <a href="/ja/docs/Web/JavaScript/Typed_arrays">型付き配列</a> か <a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer">ArrayBuffer</a> を含む .wasm モジュールのバイナリコード。</dd> +</dl> + +<h3 id="戻り値">戻り値</h3> + +<p>解決時にコンパイルされたモジュールを表す {{jsxref("WebAssembly.Module")}} オブジェクト渡す <code>Promise 。</code></p> + +<h3 id="例外">例外</h3> + +<ul> + <li><font face="Consolas, Liberation Mono, Courier, monospace">バイナリソースが</font> <a href="/ja/docs/Web/JavaScript/Typed_arrays">型付き配列</a> でない場合、 {{jsxref("TypeError")}} がスローされます。</li> + <li>コンパイルが失敗したとき、プロミスは {{jsxref("WebAssembly.CompileError")}} で棄却されます。</li> +</ul> + +<h2 id="例">例</h2> + +<p>以下の例では (Github上のデモ <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/index-compile.html">index-compile.html</a> と <a href="https://mdn.github.io/webassembly-examples/js-api-examples/index-compile.html">動作例</a> をご確認ください) <code>compile()</code> 関数を使ってロードした simple.wasm のバイトコードをコンパイルして、その後 <a href="/ja/docs/Web/API/Worker/postMessage">postMessage()</a> を使って <a href="https://developer.mozilla.org/ja/docs/Web/API/Web_Workers_API">worker</a> に送信しています。</p> + +<pre class="brush: 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) +);</pre> + +<p>ワーカー内で (<code><a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/wasm_worker.js">wasm_worker.js</a> を参照</code>) モジュールで使用するためのインポートオブジェクトを定義して、メインスレッドからモジュールを受け取るためのイベントハンドラをセットアップします。モジュールを受け取ったとき、 {{jsxref("WebAssembly.Instantiate()")}} メソッドを使用してモジュールからインスタンスを生成します。内部からエクスポートされた関数を実行して、その後に {{jsxref("WebAssembly.Module/exports", "WebAssembly.Module.exports")}} プロパティを使用してモジュール上で利用可能なエクスポートに関する情報を確認する方法を示します。</p> + +<pre class="brush: 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]); +};</pre> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#webassemblycompile', 'compile()')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>初回ドラフト定義。</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2> + +<div>{{Compat("javascript.builtins.WebAssembly.compile")}}</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="https://developer.mozilla.org/ja/docs/WebAssembly/Concepts">WebAssembly のコンセプト</a></li> + <li><a href="https://developer.mozilla.org/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/compileerror/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/compileerror/index.html new file mode 100644 index 0000000000..785e7f604e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/compileerror/index.html @@ -0,0 +1,110 @@ +--- +title: WebAssembly.CompileError() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/CompileError +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p><code><strong>WebAssembly.CompileError()</strong></code> コンストラクタは WebAssembly <code>CompileError</code> オブジェクトを生成します。WebAssembly のデコードやバリデーション中にエラーが発生したことを示します。</p> + +<h2 id="構文">構文</h2> + +<pre class="syntaxbox"><code>new WebAssembly.CompileError(<var>message</var>, <var>fileName</var>, <var>lineNumber</var>)</code></pre> + +<h3 id="パラメータ">パラメータ</h3> + +<dl> + <dt><code>message</code> {{optional_inline}}</dt> + <dd>ヒューマンリーダブルなエラーの説明。</dd> + <dt><code>fileName</code> {{optional_inline}}{{non-standard_inline}}</dt> + <dd>例外の原因となったコードを含むファイルの名前。</dd> + <dt><code>lineNumber</code> {{optional_inline}}{{non-standard_inline}}</dt> + <dd>例外の原因となったコードの行番号。</dd> +</dl> + +<h2 id="プロパティ">プロパティ</h2> + +<p><em><code>CompileError</code> コンストラクタは自身のプロパティを持ちませんが、プロトタイプチェーンを通していくつかのプロパティを継承します。</em></p> + +<dl> + <dt><code>WebAssembly.CompileError.prototype.constructor</code></dt> + <dd>インスタンスのプロトタイプを生成した関数を示します。</dd> + <dt>{{jsxref("Error.prototype.message", "WebAssembly.CompileError.prototype.message")}}</dt> + <dd>エラーメッセージ。ECMA-262では {{jsxref("URIError")}} は自身の <code>message</code> プロパティを提供する必要がありますが、<a href="/ja/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> では {{jsxref("Error.prototype.message")}} を継承します。</dd> + <dt>{{jsxref("Error.prototype.name", "WebAssembly.CompileError.prototype.name")}}</dt> + <dd>エラー名。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.fileName", "WebAssembly.CompileError.prototype.fileName")}}</dt> + <dd>このエラーを発生させたファイルのパス。 {{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.lineNumber", "WebAssembly.CompileError.prototype.lineNumber")}}</dt> + <dd>このエラーを発生させたファイルの行番号。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.columnNumber", "WebAssembly.CompileError.prototype.columnNumber")}}</dt> + <dd>このエラーが発生した行の列番号。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.stack", "WebAssembly.CompileError.prototype.stack")}}</dt> + <dd>スタックトレース。{{jsxref("Error")}} から継承されます。</dd> +</dl> + +<h2 id="メソッド">メソッド</h2> + +<p><em><code>CompileError</code> コンストラクタは自身のメソッドを持ちませんが、プロトタイプチェーンを通していくつかのメソッドを継承します。</em></p> + +<dl> + <dt>{{jsxref("Error.prototype.toSource", "WebAssembly.CompileError.prototype.toSource()")}}</dt> + <dd>同じエラーを評価できるコードを返します。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.toString", "WebAssembly.CompileError.prototype.toString()")}}</dt> + <dd>指定された <code>Error</code> オブジェクトを表す文字列を返します。{{jsxref("Error")}} から継承されます。</dd> +</dl> + +<h2 id="例">例</h2> + +<p>以下のスニペットで <code>CompileError</code> インスタンスを生成して、詳細をコンソールに表示します。</p> + +<pre class="brush: 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); // コードが実行された場所を返す +}</pre> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>WebAssembly の初回ドラフト定義。</td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td>標準の NativeError 型の定義。</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2> + +<div>{{Compat("javascript.builtins.WebAssembly.CompileError")}}</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly のコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> + +<dl> +</dl> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html new file mode 100644 index 0000000000..e3048ea38f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html @@ -0,0 +1,77 @@ +--- +title: WebAssembly.compileStreaming() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p><strong><code>WebAssembly.compileStreaming()</code></strong> 関数はソースのストリームから直接 {{jsxref("WebAssembly.Module")}} にコンパイルします。この関数はモジュールをインスタンス化する前にコンパイルする必要がある場合に役立ちます (そうでない場合は、{{jsxref("WebAssembly.instantiateStreaming()")}} 関数の仕様が推奨されます)。</p> + +<h2 id="構文">構文</h2> + +<pre class="syntaxbox">Promise<WebAssembly.Module> WebAssembly.compileStreaming(<em>source</em>);</pre> + +<h3 id="パラメータ">パラメータ</h3> + +<dl> + <dt><em>source</em></dt> + <dd>ストリーム、コンパイルする .wasm モジュールのソースコードを表す {{domxref("Response")}} オブジェクトか、それを fulfill するプロミス。 </dd> +</dl> + +<h3 id="戻り値">戻り値</h3> + +<p>解決時にコンパイルされたモジュールを表す {{jsxref("WebAssembly.Module")}} を渡す <code>Promise</code> 。</p> + +<h3 id="例外">例外</h3> + +<ul> + <li><code>bufferSource</code> が <a href="/ja/docs/Web/JavaScript/Typed_arrays">型付き配列</a> でない場合、 {{jsxref("TypeError")}} がスローされます。</li> + <li>失敗した場合、プロミスは {{jsxref("WebAssembly.CompileError")}} を持って棄却されます。</li> +</ul> + +<h2 id="例">例</h2> + +<p>次の例 (Github上のデモ <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/compile-streaming.html">compile-streaming.html</a> と、<a href="https://mdn.github.io/webassembly-examples/js-api-examples/compile-streaming.html">動作例</a> を参照してください) では、ソースから直接 .wasm モジュールをストリームして、 {{jsxref("WebAssembly.Module")}} オブジェクトにコンパイルしています。<code>compileStreaming()</code> 関数は {{domxref("Response")}} オブジェクトを渡すプロミスを受け取るので、直接 {{domxref("WindowOrWorkerGlobalScope.fetch()")}} の呼び出し結果を渡すことができます。</p> + +<pre class="brush: js">var importObject = { imports: { imported_func: arg => console.log(arg) } }; + +WebAssembly.compileStreaming(fetch('simple.wasm')) +.then(module => WebAssembly.instantiate(module, importObject)) +.then(instance => instance.exports.exported_func());</pre> + +<p>結果として受け取ったモジュールインスタンスはその後 {{jsxref("WebAssembly.instantiate()")}} を使用してインスタンス化され、エクスポートされた関数が実行されます。</p> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly Embedding', '#webassemblycompilestreaming', 'compileStreaming()')}}</td> + <td>{{Spec2('WebAssembly Embedding')}}</td> + <td>初回ドラフト定義</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2> + +<div> + + +<p>{{Compat("javascript.builtins.WebAssembly.compileStreaming")}}</p> +</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssemblyのコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript APIを使用する</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/global/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/global/index.html new file mode 100644 index 0000000000..16817b0777 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/global/index.html @@ -0,0 +1,118 @@ +--- +title: WebAssembly.Global +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Global +tags: + - API + - Constructor + - JavaScript + - Reference + - WebAssembly + - global +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Global +--- +<div>{{JSRef}}</div> + +<p><strong><code>WebAssembly.Global</code></strong> はグローバル変数として存在し、JavaScript または {{jsxref("WebAssembly.Module")}} インスタンスから参照することができます。これにより動的に複数のモジュールをリンクすることができます。</p> + +<h2 id="Constructor_Syntax" name="Constructor_Syntax">コンストラクターの文法</h2> + +<pre class="syntaxbox">var myGlobal = new WebAssembly.Global(<em>descriptor</em>, <em>value</em>);</pre> + +<h3 id="Parameters" name="Parameters">パラメーター</h3> + +<dl> + <dt><em>descriptor</em></dt> + <dd><code>GlobalDescriptor</code> 辞書オブジェクト、2 つの要素を持っている: + <ul> + <li><code>value</code>: {{domxref("USVString")}} はグローバルデータ形式を表し値として <code>i32</code>、<code>i64</code>、<code>f32</code>、<code>f64</code> のうち一つを取ります。</li> + <li><code>mutable</code>: グローバルがミュータブルかどうかの真偽値です。デフォルトでは <code>false</code> です。</li> + </ul> + </dd> + <dt><em>value</em></dt> + <dd>変数が保持する値です。変数のデータ型に合う限りどんな値でも取れます。もしも何の値も渡されないと、<a href="https://webassembly.github.io/spec/js-api/#defaultvalue"><code>DefaultValue</code> algorithm</a> で指定した時の様な 型ありの 0 が使われます。</dd> +</dl> + +<h2 id="Function_properties_of_the_Global_constructor" name="Function_properties_of_the_Global_constructor">グローバルコンストラクターによる関数プロパティ</h2> + +<p>無し</p> + +<h2 id="Global_instances" name="Global_instances">グローバルインスタンス</h2> + +<p>すべてのグローバルインスタンスは <code>Global()</code> コンストラクターのプロパティオブジェクトを受け継ぐ — これによりすべての <code>Global</code> インスタンスを変更できる</p> + +<h3 id="Instance_properties" name="Instance_properties">インスタンスプロパティ</h3> + +<p>{{page('/ja/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/prototype', 'Properties')}}</p> + +<h3 id="Instance_methods" name="Instance_methods">インスタンスメソッド</h3> + +<p>{{page('/ja/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/prototype', 'Methods')}}</p> + +<h2 id="Examples" name="Examples">例</h2> + +<p>以下の例では新しいグローバルインスタンスは <code>WebAssembly.Global()</code> コンストラクターを用いて初期化され、初期値 0 のミュータブルな <code>i32</code> 型として定義されます。</p> + +<p>その後この値は、<code>Global.value</code> プロパティを使うことによって <code>42</code> に、<code>global.wasm</code> モジュールから公開された <code>incGlobal()</code> 関数 (入力に限らず 1 を加算する) を使うことによって <code>43</code> になります。</p> + +<pre class="brush: js">const output = document.getElementById('output'); + +function assertEq(msg, got, expected) { + output.innerHTML += `Testing ${msg}: `; + if (got !== expected) + output.innerHTML += `FAIL!<br>Got: ${got}<br>Expected: ${expected}<br>`; + else + output.innerHTML += `SUCCESS! Got: ${got}<br>`; +} + +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); +});</pre> + +<div class="note"> +<p><strong>メモ</strong>: <a href="https://mdn.github.io/webassembly-examples/js-api-examples/global.html">GitHub 上で動くデモ</a>が試せます。<a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/global.html">ソースコード</a>も確認してみてください。</p> +</div> + +<h2 id="Specifications" name="Specifications">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#globals', 'WebAssembly.Global()')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>初回ドラフト定義</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザー実装状況</h2> + +<div> + + +<p>{{Compat("javascript.builtins.WebAssembly.Global")}}</p> +</div> + +<h2 id="See_also" name="See_also">参考</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly とは何か</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> + <li><a href="https://github.com/WebAssembly/mutable-global/blob/master/proposals/mutable-global/Overview.md">Import/Export mutable globals proposal</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/index.html new file mode 100644 index 0000000000..721d647799 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/index.html @@ -0,0 +1,116 @@ +--- +title: WebAssembly +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly +tags: + - API + - JavaScript + - Namespace + - Object + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly +--- +<div>{{JSRef}}{{SeeCompatTable}}</div> + +<p><strong><code>WebAssembly</code></strong> JavaScript オブジェクトは全ての <a href="/ja/docs/WebAssembly">WebAssembly</a> に関連する機能の名前空間として振る舞います。</p> + +<p>他のグローバルオブジェクトとは異なり、<code>WebAssembly</code> はコンストラクタではありません (関数オブジェクトではない) 。数学定数、関数の名前空間である {{jsxref("Math")}} や 、国際化コンストラクタと他の言語に依存する関数のための {{jsxref("Intl")}} と同等のものです。</p> + +<h2 id="概要">概要</h2> + +<p><code>WebAssembly</code> オブジェクトの主な用途は次のとおりです:</p> + +<ul> + <li>{{jsxref("WebAssembly.instantiate()")}} 関数を用いて WebAssembly コードをロードします。</li> + <li>{{jsxref("WebAssembly.Memory()")}}/{{jsxref("WebAssembly.Table()")}} コンストラクタ経由で新しいメモリやテーブルを生成します。</li> + <li>{{jsxref("WebAssembly.CompileError()")}}/{{jsxref("WebAssembly.LinkError()")}}/{{jsxref("WebAssembly.RuntimeError()")}} コンストラクタを経由して、WebAssembly で発生するエラーを処理する機能を提供します、</li> +</ul> + +<h2 id="メソッド">メソッド</h2> + +<dl> + <dt>{{jsxref("WebAssembly.instantiate()")}}</dt> + <dd>WebAssembly コードをコンパイル、インスタンス化するための主要な API で、 <code>Module</code> と、その最初の <code>Instance</code> を返します。</dd> + <dt>{{jsxref("WebAssembly.instantiateStreaming()")}}</dt> + <dd>ソースのストリームから直接 WebAssembly モジュールをコンパイル、インスタンス化し、 <code>Module</code> と、その最初の <code>Instance</code> を返します。</dd> + <dt>{{jsxref("WebAssembly.compile()")}}</dt> + <dd>{{jsxref("WebAssembly.Module")}} を用いて WebAssembly バイナリコードからコンパイルします。インスタンス化は別ステップとして分離されます。</dd> + <dt>{{jsxref("WebAssembly.compileStreaming()")}}</dt> + <dd>ソースのストリームから直接 {{jsxref("WebAssembly.Module")}} にコンパイルします。インスタンス化は別ステップとして分離されます。</dd> + <dt>{{jsxref("WebAssembly.validate()")}}</dt> + <dd>WebAssembly バイナリコードの型付き配列を検証し、バイト列が有効な WebAssembly コードか (<code>true</code>) 否か (<code>false</code>) を返します。</dd> +</dl> + +<h2 id="コンストラクタ">コンストラクタ</h2> + +<dl> + <dt>{{jsxref("WebAssembly.Module()")}}</dt> + <dd>新しい WebAssembly <code>Module</code> オブジェクトを生成します。</dd> + <dt>{{jsxref("WebAssembly.Instance()")}}</dt> + <dd>新しい WebAssembly <code>Instance</code> オブジェクトを生成します。</dd> + <dt>{{jsxref("WebAssembly.Memory()")}}</dt> + <dd>新しい WebAssembly <code>Memory</code> オブジェクトを生成します。</dd> + <dt>{{jsxref("WebAssembly.Table()")}}</dt> + <dd>新しい WebAssembly <code>Table</code> オブジェクトを生成します。</dd> + <dt>{{jsxref("WebAssembly.CompileError()")}}</dt> + <dd>新しい WebAssembly <code>CompileError</code> オブジェクトを生成します。</dd> + <dt>{{jsxref("WebAssembly.LinkError()")}}</dt> + <dd>新しい WebAssembly <code>LinkError</code> オブジェクトを生成します。</dd> + <dt>{{jsxref("WebAssembly.RuntimeError()")}}</dt> + <dd>新しい WebAssembly <code>RuntimeError</code> オブジェクトを生成します。</dd> +</dl> + +<h2 id="例">例</h2> + +<p>fetch を使用して WebAssembly バイトコードをフェッチした後、{{jsxref("WebAssembly.instantiate()")}} 関数を使用してモジュールをコンパイル、インスタンス化します。その過程で、WebAssembly モジュールに JavaScript の関数をインポートします。このプロミスは解決時に <code><a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module">Module</a></code> と <code><a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance">Instance</a></code> を含むオブジェクト (<code>result</code>) を渡します。次に、<code>Instance</code> からエクスポートされている <a href="/ja/docs/WebAssembly/Exported_functions">エクスポートされた WebAssembly 関数</a> を呼び出します。</p> + +<pre class="brush: js notranslate">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() +);</pre> + +<div class="note"> +<p><strong>注</strong>: GitHub上の例 (<a href="https://mdn.github.io/webassembly-examples/js-api-examples/">動作例</a>) の<a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/index.html">index.html</a>では、我々で定義した <code><a href="https://github.com/mdn/webassembly-examples/blob/master/wasm-utils.js#L1">fetchAndInstantiate()</a></code> ライブラリ関数を使用しています。</p> +</div> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#the-webassembly-object', 'WebAssembly')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>初回ドラフト定義。</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2> + +<div>{{Compat("javascript.builtins.WebAssembly")}}</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly のコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instance/exports/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instance/exports/index.html new file mode 100644 index 0000000000..1e7a2bb83c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instance/exports/index.html @@ -0,0 +1,69 @@ +--- +title: WebAssembly.Instance.prototype.exports +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/exports +tags: + - API + - JavaScript + - Property + - Reference + - WebAssembly + - exports + - instance + - プロパティ +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/exports +--- +<div>{{JSRef}}</div> + +<p><strong><code>exports</code></strong> は {{jsxref("WebAssembly.Instance")}} オブジェクトプロトタイプの読み取り専用プロパティで、 WebAssembly モジュールインスタンスからエクスポートされたすべての関数をメンバ-として持つオブジェクトを返します。これらは、 JavaScript からアクセスして使用することができます。</p> + +<pre class="syntaxbox">instance.exports</pre> + +<h2 id="Examples" name="Examples">例</h2> + +<p>fetch を使用して WebAssembly バイトコードを読み取った後、 {{jsxref("WebAssembly.instantiate()")}} 関数を使用してモジュールをコンパイル、インスタンス化します。このプロセスの中で、 JavaScript 関数を WebAssembly モジュールにインポートします。その後、 <code>Instance</code> からエクスポートされた<a href="/ja/docs/WebAssembly/Exported_functions">エクスポート済み WebAssembly 関数</a> を呼び出します。</p> + +<pre class="brush: js">var importObject = { + imports: { + imported_func: function(arg) { + console.log(arg); + } + } +}; + +WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject) +.then(obj => obj.instance.exports.exported_func());</pre> + +<div class="note"> +<p><strong>メモ</strong>: この例は GitHub 上の <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/instantiate-streaming.html">instantiate-streaming.html</a> (<a href="https://mdn.github.io/webassembly-examples/js-api-examples/instantiate-streaming.html">ライブでも</a>) で見ることができます。</p> +</div> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-instance-exports', 'WebAssembly.Instance: exports')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div> +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Instance.exports")}}</p> +</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instance/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instance/index.html new file mode 100644 index 0000000000..2f8ad23054 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instance/index.html @@ -0,0 +1,69 @@ +--- +title: WebAssembly.Instance +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance +tags: + - Class + - JavaScript + - Reference + - WebAssembly + - クラス +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance +--- +<div>{{JSRef}}</div> + +<p><strong><code>WebAssembly.Instance</code></strong> オブジェクトはステートフルで、実行可能な {{jsxref("WebAssembly.Module")}} のインスタンスです。 <code>Instance</code> オブジェクトには JavaScript から WebAssembly コードを呼び出すことができるすべての<a href="/en-US/docs/WebAssembly/Exported_functions">エクスポートされた WebAssembly 関数</a>が含まれます。</p> + +<h2 id="Constructor" name="Constructor">コンストラクター</h2> + +<dl> + <dt>{{jsxref("WebAssembly.Instance()")}}</dt> + <dd>新しい <code>Instance</code> オブジェクトを生成します。</dd> +</dl> + +<h2 id="Instance_のインスタンス"><code>Instance</code> のインスタンス</h2> + +<p>全ての <code>Instance</code> インスタンスは <code>Instance()</code> コンストラクターのプロトタイプオブジェクトを継承します。これは全ての <code>Instance</code> インスタンスに影響するように変更可能です。</p> + +<h3 id="Instance_properties" name="Instance_properties">インスタンスプロパティ</h3> + +<dl> + <dt><code>Instance.prototype.constructor</code></dt> + <dd>このオブジェクトインスタンスを生成した関数を返します。既定では、これは {{jsxref("WebAssembly.Instance()")}} コンストラクターです。</dd> + <dt>{{jsxref("WebAssembly/Instance/exports", "Instance.prototype.exports")}} {{readonlyinline}}</dt> + <dd>メンバーとして WebAssembly モジュールのインスタンスからエクスポートされたすべての関数を含むオブジェクトを返します。 JavaScript からアクセスしたり使用したりすることができます。</dd> +</dl> + +<h3 id="Instance_methods" name="Instance_methods">インスタンスメソッド</h3> + +<p>なし。</p> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#instances', 'Instance')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div> +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Memory")}}</p> +</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instance/instance/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instance/instance/index.html new file mode 100644 index 0000000000..117e82225f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instance/instance/index.html @@ -0,0 +1,64 @@ +--- +title: WebAssembly.Instance() コンストラクター +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/Instance +tags: + - Constructor + - JavaScript + - Reference + - WebAssembly + - コンストラクター +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/Instance +--- +<div>{{JSRef}}</div> + +<p> <strong><code>WebAssembly.Instance()</code></strong> コンストラクターは、新しい <code>Instance</code> オブジェクトを生成し、これはステートフルで実行可能な {{jsxref("WebAssembly.Module")}} のインスタンスです。</p> + +<p> <code>WebAssembly.Instance()</code> コンストラクター関数は同期的に {{jsxref("WebAssembly.Module")}} オブジェクトをインスタンス化することができます。しかし、主な <code>Instance</code> の取得方法は非同期の {{jsxref("WebAssembly.instantiateStreaming()")}} 関数を使用する方法です。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<div class="warning"> +<p><strong>重要</strong>: 巨大なモジュールのインスタンス化は高コストになる可能性があります。開発者が同期的な <code>Instance()</code> コンストラクターを使用するのは、絶対に必要な場合のみにするべきです。他のすべての場合で非同期の {{jsxref("WebAssembly.instantiateStreaming()")}} メソッドの使用が推奨されます。</p> +</div> + +<pre class="syntaxbox">new WebAssembly.Instance(<em>module</em>, <em>importObject</em>);</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><em>module</em></dt> + <dd>インスタンス化する {{jsxref("WebAssembly.Module")}} オブジェクト。</dd> + <dt><em>importObject</em> {{optional_inline}}</dt> + <dd>関数や {{jsxref("WebAssembly.Memory")}} オブジェクトなどの新しく生成される <code>Instance</code> にインポートされる値を持つオブジェクト。モジュール内で宣言されたインポートそれぞれに対応するプロパティが存在する必要があります。そうでない場合、 {{jsxref("WebAssembly.LinkError")}} が発生します。</dd> +</dl> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-instance-instance', 'Instance')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div> +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Instance.Instance")}}</p> +</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instance/prototype/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instance/prototype/index.html new file mode 100644 index 0000000000..f1f8361b0c --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instance/prototype/index.html @@ -0,0 +1,63 @@ +--- +title: WebAssembly.Instance.prototype +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/prototype +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p><code><strong>WebAssembly.Instance</strong></code><strong><code>.prototype</code></strong> プロパティは {{jsxref("WebAssembly.Instance()")}} コンストラクタのプロトタイプを表します。</p> + +<div>{{js_property_attributes(0, 0, 0)}}</div> + +<h2 id="説明">説明</h2> + +<p>全ての {{jsxref("WebAssembly.Instance")}} インスタンスは <code>Instance.prototype</code> を継承します。{{jsxref("WebAssembly.Instance()")}} コンストラクタのプロトタイプオブジェクトは全ての {{jsxref( "WebAssembly.Instance")}} インスタンスに影響するように変更可能です。 </p> + +<h2 id="プロパティ">プロパティ</h2> + +<dl> + <dt><code>Instance.prototype.constructor</code></dt> + <dd>このオブジェクトのインスタンスを生成した関数を返します。デフォルトでは {{jsxref("WebAssembly.Instance()")}} コンストラクタです。</dd> + <dt><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance/exports">Instance.prototype.exports</a></code> {{readonlyinline}}</dt> + <dd>WebAssembly モジュールインスタンスからエクスポートされた全ての関数をメンバとして持つオブジェクトを返します。これらは、JavaScriptからアクセスして使用することができます。</dd> +</dl> + +<h2 id="メソッド">メソッド</h2> + +<p>なし。</p> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#webassemblymodule-objects', 'WebAssembly.Module()')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>初回ドラフト定義</td> + </tr> + </tbody> +</table> + +<h2 id="ブラウザ実装状況">ブラウザ実装状況</h2> + +<div> + + +<p>{{Compat("javascript.builtins.WebAssembly.Instance.prototype")}}</p> +</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li>{{jsxref("WebAssembly.Instance()")}}</li> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssemblyのコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instantiate/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instantiate/index.html new file mode 100644 index 0000000000..4d42c91ee5 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instantiate/index.html @@ -0,0 +1,171 @@ +--- +title: WebAssembly.instantiate() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate +tags: + - API + - JavaScript + - Method + - Object + - Reference + - WebAssembly + - instantiate + - オブジェクト + - メソッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate +--- +<div>{{JSRef}}</div> + +<p><strong><code>WebAssembly.instantiate()</code></strong> 関数は WebAssembly コードをコンパイルおよびインスタンス化することができます。この関数は2つのオーバーロードを持ちます。</p> + +<ul> + <li>第一のオーバーロードは、 <a href="/ja/docs/Web/JavaScript/Typed_arrays">型付き配列</a> または {{jsxref("ArrayBuffer")}} で表現された WebAssembly バイナリコードを受け取り、そして、コンパイルとインスタンス化の両方を1ステップで行います。返された <code>Promise</code> は解決時にコンパイルされた {{jsxref("WebAssembly.Module")}} と最初の {{jsxref("WebAssembly.Instance")}} を渡します。</li> + <li>第二のオーバーロードは、すでにコンパイルされた {{jsxref("WebAssembly.Module")}} を受け取り、解決時にその <code>Module</code> の <code>Instance</code> を渡す <code>Promise</code> を返します。このオーバーロードは、すでに <code>Module</code> がコンパイル済みの場合に有用です。</li> +</ul> + +<div class="warning"> +<p><strong>重要</strong>: このメソッドは wasm モジュールの読み込みとインスタンス化に最も効率で黄な方法ではありません。可能であれば、代わりにもっと新しい {{jsxref("WebAssembly.instantiateStreaming()")}} メソッドを使用すれば、生のバイトコードから直接モジュールの読み込み、コンパイル、インスタンス化を1ステップで行うことができ、 {{jsxref("ArrayBuffer")}} へ変換する必要がありません。</p> +</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<h3 id="Primary_overload_—_taking_wasm_binary_code" name="Primary_overload_—_taking_wasm_binary_code">第一のオーバーロード — wasm バイナリコード</h3> + +<pre class="syntaxbox notranslate">Promise<ResultObject> WebAssembly.instantiate(bufferSource, importObject); +</pre> + +<h4 id="Parameters" name="Parameters">引数</h4> + +<dl> + <dt><em>bufferSource</em></dt> + <dd>コンパイルする .wasm モジュールを含む <a href="/ja/docs/Web/JavaScript/Typed_arrays">型付き配列</a> または {{jsxref("ArrayBuffer")}}。</dd> + <dt><em>importObject</em> {{optional_inline}}</dt> + <dd>関数や {{jsxref("WebAssembly.Memory")}} オブジェクトなどの新しく生成される <code>Instance</code> にインポートされる値を持つオブジェクト。モジュール内で宣言されたインポートそれぞれに対応するプロパティが存在する必要があります。そうでない場合、 {{jsxref("WebAssembly.LinkError")}} がスローされます。</dd> +</dl> + +<h4 id="Return_value" name="Return_value">返値</h4> + +<p>解決時に次の2つのフィールドを持つ <code>ResultObject</code> を渡す <code>Promise</code>。</p> + +<ul> + <li><code>module</code>: コンパイルされた {{jsxref("WebAssembly.Module")}} オブジェクト。この <code>Module</code> は再度インスタンス化することや、 {{domxref("Worker.postMessage", "postMessage()")}} 経由で共有したり、 <a href="/ja/docs/WebAssembly/Caching_modules">IndexedDB にキャッシュ</a>することができます。</li> + <li><code>instance</code>: {{jsxref("WebAssembly.Instance")}} オブジェクトで、すべての <a href="/en-US/docs/WebAssembly/Exported_functions">エクスポートされた WebAssembly 関数</a> を含む。</li> +</ul> + +<h4 id="Exceptions" name="Exceptions">例外</h4> + +<ul> + <li>いずれかの引数が正しい型、または構造でない場合、 {{jsxref("TypeError")}} がスローされます。</li> + <li>失敗した場合、プロミスは失敗の原因に応じて {{jsxref("WebAssembly.CompileError")}}, {{jsxref("WebAssembly.LinkError")}}, {{jsxref("WebAssembly.RuntimeError")}} をもって棄却されます。</li> +</ul> + +<h3 id="Secondary_overload_—_taking_a_module_object_instance" name="Secondary_overload_—_taking_a_module_object_instance">第二のオーバーロード — モジュールオブジェクトのインスタンスを取る</h3> + +<pre class="syntaxbox notranslate">Promise<WebAssembly.Instance> WebAssembly.instantiate(module, importObject); +</pre> + +<h4 id="Parameters_2" name="Parameters_2">引数</h4> + +<dl> + <dt><em>module</em></dt> + <dd>インスタンス化する {{jsxref("WebAssembly.Module")}} オブジェクト。</dd> + <dt><em>importObject</em> {{optional_inline}}</dt> + <dd>関数や {{jsxref("WebAssembly.Memory")}} オブジェクトなどの新しく生成される <code>Instance</code> にインポートされる値を含むオブジェクト。宣言されたモジュールのインポートごとに1つの一致するプロパティが存在する必要があります。そうでない場合、 {{jsxref("WebAssembly.LinkError")}} がスローされます。</dd> +</dl> + +<h4 id="Return_value_2" name="Return_value_2">返値</h4> + +<p>解決時に {{jsxref("WebAssembly.Instance")}} オブジェクトを渡す <code>Promise</code> 。</p> + +<h4 id="Exceptions_2" name="Exceptions_2">例外</h4> + +<ul> + <li>いずれかの引数が正しくない型や構造のオブジェクトの場合、 {{jsxref("TypeError")}} がスローされます。</li> + <li>失敗した場合、プロミスは失敗の原因に応じて {{jsxref("WebAssembly.CompileError")}}, {{jsxref("WebAssembly.LinkError")}}, {{jsxref("WebAssembly.RuntimeError")}} をもって棄却されます。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<p><strong>注</strong>: おそらく多くの場合は {{jsxref("WebAssembly.instantiateStreaming()")}} を使用したほうが、 <code>instantiate()</code> よりも効率的でしょう。</p> + +<h3 id="First_overload_example" name="First_overload_example">第一のオーバーロードの例</h3> + +<p>fetch を使用して WebAssembly バイトコードを読み込んだ後、 {{jsxref("WebAssembly.instantiate()")}} 関数を使用してモジュールをコンパイル、インスタンス化し、その処理中に JavaScript の関数を WebAssembly モジュールにインポートします。次に、 <code>Instance</code> によってエクスポートされた<a href="/ja/docs/WebAssembly/Exported_functions">エクスポート済み WebAssembly 関数</a>を呼び出します。</p> + +<pre class="brush: js notranslate">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() +);</pre> + +<div class="note"> +<p><strong>注</strong>: この例は Github 上の <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/index.html">index.html</a> でも見ることができます (<a href="https://mdn.github.io/webassembly-examples/js-api-examples/">動作例</a>)。</p> +</div> + +<h3 id="Second_overload_example" name="Second_overload_example">第二のオーバーロードの例</h3> + +<p>次の例 (GitHub上の <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/index-compile.html">index-compile.html</a> デモを参照、 そして <a href="https://mdn.github.io/webassembly-examples/js-api-examples/index-compile.html">動作例</a> も確認してください) では、読み込まれた simple.wasm バイトコードを {{jsxref("WebAssembly.compileStreaming()")}} メソッドを使用してコンパイルし、 {{domxref("Worker.postMessage", "postMessage()")}} を使用して<a href="/ja/docs/Web/API/Web_Workers_API">ワーカー</a>に送信しています。</p> + +<pre class="brush: js notranslate">var worker = new Worker("wasm_worker.js"); + +WebAssembly.compileStreaming(fetch('simple.wasm')) +.then(mod => + worker.postMessage(mod) +);</pre> + +<p>ワーカーでは (<code><a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/wasm_worker.js">wasm_worker.js</a>を参照</code>) モジュールで使用するためのインポートオブジェクトを定義して、メインスレッドからモジュールを受け取るイベントハンドラーを設定し、 {{jsxref("WebAssembly.instantiate()")}} メソッドを使用してインスタンスを生成し、エクスポートされた関数を呼び出します。</p> + +<pre class="brush: js notranslate">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(); + }); +};</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-webassembly-instantiate', 'instantiate()')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<div>{{Compat("javascript.builtins.WebAssembly.instantiate")}}</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.html new file mode 100644 index 0000000000..fb3ba701c1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/instantiatestreaming/index.html @@ -0,0 +1,83 @@ +--- +title: WebAssembly.instantiateStreaming() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p><strong><code>WebAssembly.instantiateStreaming()</code></strong> 関数はソースのストリームから直接 WebAssembly モジュールをコンパイルしてインスタンス化します。</p> + +<h2 id="構文">構文</h2> + +<pre class="syntaxbox">Promise<ResultObject> WebAssembly.instantiateStreaming(<em>source</em>, <em>importObject</em>);</pre> + +<h3 id="パラメータ">パラメータ</h3> + +<dl> + <dt><em>source</em></dt> + <dd>コンパイルしてインスタンス化する .wasm モジュールのソースを表す {{domxref("Response")}} オブジェクトか、それをfulfillするプロミス。</dd> + <dt><em>importObject</em> {{optional_inline}}</dt> + <dd>関数や {{jsxref("WebAssembly.Module")}} オブジェクトなどの新しく生成される <code>Instance</code> にインポートされる値を持つオブジェクト。モジュール内で宣言されたインポートそれぞれに対応するプロパティが存在する必要があります。そうでない場合、{{jsxref("WebAssembly.LinkError")}} がスローされます。</dd> +</dl> + +<h3 id="戻り値">戻り値</h3> + +<p>解決時に次の2つのフィールドを持つ <code>ResultObject</code> を渡す <code>Promise</code>:</p> + +<ul> + <li><code>module</code>: コンパイルされた {{jsxref("WebAssembly.Module")}} オブジェクト。この <code>Module</code> は再度インスタンス化することや、<a href="/en-US/docs/Web/API/Worker/postMessage">postMessage()</a> 経由で共有したり、<a href="/en-US/docs/WebAssembly/Caching_modules">IndexedDBにキャッシュ</a>することができます。</li> + <li><code>instance</code>: 全ての <a href="/en-US/docs/WebAssembly/Exported_functions">エクスポートされたWebAssembly関数</a> を含む {{jsxref("WebAssembly.Instance")}} オブジェクト。</li> +</ul> + +<h3 id="例外">例外</h3> + +<ul> + <li>いずれかのパラメータが正しい型、または構造でない場合、{{jsxref("TypeError")}} がスローされます。</li> + <li>失敗した場合、プロミスは失敗の原因に応じて {{jsxref("WebAssembly.CompileError")}}、{{jsxref("WebAssembly.LinkError")}} または {{jsxref("WebAssembly.RuntimeError")}} を持って棄却されます。</li> +</ul> + +<h2 id="例">例</h2> + +<p>次の例 (Github上のデモ <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/instantiate-streaming.html">instantiate-streaming.html</a> と、 <a href="https://mdn.github.io/webassembly-examples/js-api-examples/instantiate-streaming.html">動作例</a> を参照してください) では、ソースから .wasm モジュールを直接コンパイルしてインスタンス化しています。プロミスは <code>ResultObject</code> で fulfill されます。<code>instantiateStreaming()</code> 関数は {{domxref("Response")}} オブジェクトを渡すプロミスを受け取るので、直接 {{domxref("WindowOrWorkerGlobalScope.fetch()")}} 呼び出し結果を渡すことができます。</p> + +<pre class="brush: js">var importObject = { imports: { imported_func: arg => console.log(arg) } }; + +WebAssembly.instantiateStreaming(fetch('simple.wasm'), importObject) +.then(obj => obj.instance.exports.exported_func());</pre> + +<p>最後に <code>ResultObject</code> が持つ instance メンバーにアクセスして、エクスポートされた関数を実行しています。</p> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly Embedding', '#webassemblyinstantiatestreaming', 'instantiateStreaming()')}}</td> + <td>{{Spec2('WebAssembly Embedding')}}</td> + <td>初回ドラフト定義</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2> + +<div> + + +<p>{{Compat("javascript.builtins.WebAssembly.instantiateStreaming")}}</p> +</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssemblyのコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/linkerror/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/linkerror/index.html new file mode 100644 index 0000000000..df9758010e --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/linkerror/index.html @@ -0,0 +1,107 @@ +--- +title: WebAssembly.LinkError() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/LinkError +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p><code><strong>WebAssembly.LinkError()</strong></code> コンストラクタは WebAssembly <code>LinkError</code> オブジェクトを生成します。これはモジュールのインスタンス化中にエラーが発生したことを示します (スタート関数からの <a href="http://webassembly.org/docs/semantics/#traps">トラップ</a> も含みます) 。</p> + +<h2 id="構文">構文</h2> + +<pre class="syntaxbox">new WebAssembly.LinkError(<var>message</var>, <var>fileName</var>, <var>lineNumber</var>)</pre> + +<h3 id="パラメータ">パラメータ</h3> + +<dl> + <dt><code>message</code> {{optional_inline}}</dt> + <dd>ヒューマンリーダブルなエラーの説明。</dd> + <dt><code>fileName</code> {{optional_inline}}{{non-standard_inline}}</dt> + <dd>例外の原因となったコードを含むファイルの名前。</dd> + <dt><code>lineNumber</code> {{optional_inline}}{{non-standard_inline}}</dt> + <dd>例外の原因となったコードの行番号。</dd> +</dl> + +<h2 id="プロパティ">プロパティ</h2> + +<p><em><code>LinkError</code> コンストラクタは自身のプロパティを持ちませんが、プロトタイプチェーンを通していくつかのプロパティを継承します。</em></p> + +<dl> + <dt><code>WebAssembly.LinkError.prototype.constructor</code></dt> + <dd>インスタンスのプロトタイプを生成した関数を示します。</dd> + <dt>{{jsxref("Error.prototype.message", "WebAssembly.LinkError.prototype.message")}}</dt> + <dd>エラーメッセージ。ECMA-262 では {{jsxref("URIError")}} は自身の <code>message</code> プロパティを提供する必要がありますが、<a href="/en-US/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> では {{jsxref("Error.prototype.message")}} を継承します。</dd> + <dt>{{jsxref("Error.prototype.name", "WebAssembly.LinkError.prototype.name")}}</dt> + <dd>エラー名。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.fileName", "WebAssembly.LinkError.prototype.fileName")}}</dt> + <dd>このエラーを発生させたファイルのパス。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.lineNumber", "WebAssembly.LinkError.prototype.lineNumber")}}</dt> + <dd>このエラーを発生させたファイルの行番号。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.columnNumber", "WebAssembly.LinkError.prototype.columnNumber")}}</dt> + <dd>このエラーが発生した行の列番号。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.stack", "WebAssembly.LinkError.prototype.stack")}}</dt> + <dd>スタックトレース。{{jsxref("Error")}} から継承されます。</dd> +</dl> + +<h2 id="メソッド">メソッド</h2> + +<p><em><code>LinkError</code> コンストラクタは自身のメソッドを持ちませんが、プロトタイプチェーンを通していくつかのメソッドを継承します。</em></p> + +<dl> + <dt>{{jsxref("Error.prototype.toSource", "WebAssembly.LinkError.prototype.toSource()")}}</dt> + <dd>同じエラーを評価できるコードを返します。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.toString", "WebAssembly.LinkError.prototype.toString()")}}</dt> + <dd>指定された <code>Error</code> オブジェクトを表す文字列を返します。{{jsxref("Error")}} から継承されます。</dd> +</dl> + +<h2 id="例">例</h2> + +<p>以下のスニペットで <code>LinkError</code> インスタンスを生成して、詳細をコンソールに表示します。</p> + +<pre class="brush: 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); // コードが実行された場所を返す +}</pre> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>WebAssembly の初回ドラフト定義。</td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td>標準の NativeError 型の定義。</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2> + +<div>{{Compat("javascript.builtins.WebAssembly.LinkError")}}</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly のコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/memory/buffer/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/memory/buffer/index.html new file mode 100644 index 0000000000..edf93b9c7b --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/memory/buffer/index.html @@ -0,0 +1,62 @@ +--- +title: WebAssembly.Memory.prototype.buffer +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/buffer +tags: + - API + - Buffer + - JavaScript + - Property + - Reference + - WebAssembly + - memory + - プロパティ +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/buffer +--- +<div>{{JSRef}}</div> + +<p><strong><code>buffer</code></strong> は {{jsxref("WebAssembly.Memory")}} オブジェクトのプロトタイププロパティで、メモリに含まれるバッファーを返します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<p>次の例では (GitHub 上の <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/memory.html">memory.html</a> および<a href="https://mdn.github.io/webassembly-examples/js-api-examples/memory.html">ライブデモ版</a> もご覧ください)、 memory.wasm バイトコードを {{jsxref("WebAssembly.instantiateStreaming()")}} メソッドを使用して読み込みんでインスタンス化し、その上の行で生成されたメモリにインポートします。それから、メモリにいくつかの値を格納し、関数をエクスポートして使用し、いくつかの値を合計します。</p> + +<pre class="brush: 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); +});</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-memory-buffer', 'buffer')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div> +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Memory.buffer")}}</p> +</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/memory/grow/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/memory/grow/index.html new file mode 100644 index 0000000000..28df2da77d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/memory/grow/index.html @@ -0,0 +1,80 @@ +--- +title: WebAssembly.Memory.prototype.grow() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/grow +tags: + - API + - JavaScript + - Method + - Reference + - WebAssembly + - grow + - memory + - メソッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/grow +--- +<div>{{JSRef}}</div> + +<p><strong><code>grow()</code></strong> は {{jsxref("WebAssembly.Memory")}} オブジェクトのプロトタイプメソッドで、指定した WebAssembly ページの数だけメモリインスタンスの大きさを拡張します。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">memory.grow(<em>number</em>); +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><em>number</em></dt> + <dd>メモリを拡大する WebAssembly ページ数 (それぞれは 64KiB の大きさ)。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>以前のメモリの大きさを、 WebAssembly ページ単位で返します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<p>以下の例では、新しい WebAssembly メモリインスタンスを初期サイズ1ページ (64KiB)、最大サイズ10ページ (640KiB) で作成します。</p> + +<pre class="brush: js">var memory = new WebAssembly.Memory({initial:1, maximum:10});</pre> + +<p>それから、インスタンスを1ページ分拡張することができます。</p> + +<pre class="brush: js">const bytesPerPage = 64 * 1024; +console.log(memory.buffer.byteLength / bytesPerPage); // "1" +console.log(memory.grow(1)); // "1" +console.log(memory.buffer.byteLength / bytesPerPage); // "2" +</pre> + +<p>なお、ここでの <code>grow()</code> の返値は直前の WebAssembly ページ数です。</p> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-memory-grow', 'grow()')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div> +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Memory.grow")}}</p> +</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/memory/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/memory/index.html new file mode 100644 index 0000000000..39a3a1ddea --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/memory/index.html @@ -0,0 +1,91 @@ +--- +title: WebAssembly.Memory() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory +tags: + - Class + - JavaScript + - Reference + - WebAssembly + - クラス +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory +--- +<div>{{JSRef}}</div> + +<p><code><strong>WebAssembly.Memory</strong></code> オブジェクトは {{jsxref("WebAssembly/Memory/buffer","buffer")}} プロパティを持ち、これはサイズ変更可能な {{jsxref("ArrayBuffer")}} で、 WebAssembly <code>Instance</code> からアクセスする生のバイト列のメモリを持ちます。</p> + +<p>JavaScript または WebAssembly コードから生成されたメモリは JavaScript と WebAssembly のどちらからもアクセス、変更が可能になります。</p> + +<h2 id="Constructor" name="Constructor">コンストラクター</h2> + +<dl> + <dt>{{jsxref("WebAssembly.Memory()")}}</dt> + <dd>新しい <code>Memory</code> オブジェクトを生成します。</dd> +</dl> + +<h2 id="Memory_インスタンス"><code>Memory</code> インスタンス</h2> + +<p>全ての <code>Memory</code> インスタンスは <code>Memory()</code> コンストラクターの<a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/prototype">プロトタイプオブジェクト</a>を継承しています。これは全ての <code>Memory</code> インスタンスに影響するように変更可能です。</p> + +<h3 id="Instance_properties" name="Instance_properties">インスタンスプロパティ</h3> + +<dl> + <dt><code>Memory.prototype.constructor</code></dt> + <dd>このオブジェクトのインスタンスを生成した関数を返します。既定では {{jsxref("WebAssembly.Memory()")}} コンストラクターです。</dd> + <dt>{{jsxref("WebAssembly/Memory/buffer","Memory.prototype.buffer")}}</dt> + <dd>メモリに格納されているバッファーを返すアクセサープロパティです。/dd></dd> +</dl> + +<h3 id="Instance_methods" name="Instance_methods">インスタンスメソッド</h3> + +<dl> + <dt>{{jsxref("WebAssembly/Memory/grow","Memory.prototype.grow()")}}</dt> + <dd>指定した WebAssembly ページの数 (64KBを1単位とする) で <code>Memory</code> インスタンスのサイズを増やします。</dd> +</dl> + +<h2 id="Examples" name="Examples">例</h2> + +<p><code>WebAssembly.Memory</code> オブジェクトを取得する方法は2つあります。1つ目は JavaScript から生成する方法です。以下の例では、初期サイズが10ページ (640KiB) 、最大サイズが100ページ (6.4MiB) で新しい WebAssembly Memory インスタンスを生成しています。</p> + +<pre class="brush: js">var memory = new WebAssembly.Memory({initial:10, maximum:100});</pre> + +<p>2つ目は WebAssembly モジュールからエクスポートされた <code>WebAssembly.Memory</code> オブジェクトを使用する方法です。次の例では (GitHub 上の <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/memory.html">memory.html</a> および<a href="https://mdn.github.io/webassembly-examples/js-api-examples/memory.html">ライブデモ版</a> もご覧ください)、 memory.wasm バイトコードを {{jsxref("WebAssembly.instantiateStreaming()")}} メソッドを使用して読み込みんでインスタンス化し、その上の行で生成されたメモリにインポートします。それから、メモリにいくつかの値を格納し、関数をエクスポートして使用し、いくつかの値を合計します。</p> + +<pre class="brush: js">fetchAndInstantiate('memory.wasm').then(function(instance) { + var i32 = new Uint32Array(instance.exports.mem.buffer); + for (var i = 0; i < 10; i++) { + i32[i] = i; + } + var sum = instance.exports.accumulate(0, 10); + console.log(sum); +});</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#memories', 'Memory')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div> +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Memory")}}</p> +</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/memory/memory/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/memory/memory/index.html new file mode 100644 index 0000000000..ff8180c361 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/memory/memory/index.html @@ -0,0 +1,94 @@ +--- +title: WebAssembly.Memory() コンストラクター +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/Memory +tags: + - Constructor + - JavaScript + - Reference + - WebAssembly + - コンストラクター +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/Memory +--- +<div>{{JSRef}}</div> + +<p>The <code><strong>WebAssembly.Memory()</strong></code> コンストラクターは新しい <code>Memory</code> オブジェクトを生成します。これは {{jsxref("WebAssembly/Memory/buffer","buffer")}} プロパティでサイズ変更可能な {{jsxref("ArrayBuffer")}} により、 WebAssembly <code>Instance</code> からアクセスする生のバイト列のメモリを持ちます。</p> + +<p>JavaScript または WebAssembly コードから生成されたメモリは JavaScript と WebAssembly のどちらからもアクセス、変更が可能になります。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">new WebAssembly.Memory(<var>memoryDescriptor</var>);</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>memoryDescriptor</var></code></dt> + <dd>以下のメンバーを含むことができるオブジェクトです。 + <dl> + <dt><em>initial</em></dt> + <dd>WebAssembly メモリの初期サイズで、単位は WebAssembly ページ数です。</dd> + <dt><em>maximum {{optional_inline}}</em></dt> + <dd>WebAssembly メモリを拡張できる最大サイズで、単位は WebAssembly ページ数です。存在する場合、 <code>maximum</code> 引数はエンジンがメモリを予約するヒントとして使用されます。ただし、エンジンはこの予約リクエストを無視したり固定したりすることがあります。一般的に、ほとんどの WebAssembly モジュールは <code>maximum</code> を設定する必要はありません。</dd> + </dl> + </dd> +</dl> + +<div class="note"> +<p><strong>メモ</strong>: WebAssembly ページは 65,536 バイト、すなわち 64KiB の固定長です。</p> +</div> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<ul> + <li><code>memoryDescriptor</code> がオブジェクトでない場合は、 {{jsxref("TypeError")}} が発生します。</li> + <li><code>maximum</code> が設定されており、かつ <code>initial</code> よりも小さい場合は、 {{jsxref("RangeError")}} が発生します。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<p><code>WebAssembly.Memory</code> オブジェクトを取得する方法は2つあります。1つ目は JavaScript から生成する方法です。以下の例では、初期サイズが10ページ (640KiB) 、最大サイズが100ページ (6.4MiB) で新しい WebAssembly Memory インスタンスを生成しています。</p> + +<pre class="brush: js">var memory = new WebAssembly.Memory({initial:10, maximum:100});</pre> + +<p>2つ目は WebAssembly モジュールからエクスポートされた <code>WebAssembly.Memory</code> オブジェクトを使用する方法です。次の例では (GitHub 上の <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/memory.html">memory.html</a> および<a href="https://mdn.github.io/webassembly-examples/js-api-examples/memory.html">ライブデモ版</a> もご覧ください)、 memory.wasm バイトコードを {{jsxref("WebAssembly.instantiateStreaming()")}} メソッドを使用して読み込みんでインスタンス化し、その上の行で生成されたメモリにインポートします。それから、メモリにいくつかの値を格納し、関数をエクスポートして使用し、いくつかの値を合計します。</p> + +<pre class="brush: 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); +});</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-memory-memory', 'Memory')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div> +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Memory.Memory")}}</p> +</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/memory/prototype/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/memory/prototype/index.html new file mode 100644 index 0000000000..e9e48b5bec --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/memory/prototype/index.html @@ -0,0 +1,70 @@ +--- +title: WebAssembly.Memory.prototype +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory/prototype +tags: + - JavaScript + - Property + - Prototype + - WebAssembly + - memory +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Memory +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p><code><strong>WebAssembly.Memory</strong></code><strong><code>.prototype</code></strong> プロパティは {{jsxref("WebAssembly.Memory()")}} コンストラクタのプロトタイプを表します。</p> + +<div>{{js_property_attributes(0, 0, 0)}}</div> + +<h2 id="説明">説明</h2> + +<p>全ての {{jsxref("WebAssembly.Memory")}} インスタンスは <code>Memory.prototype</code> を継承します。 {{jsxref("WebAssembly.Memory()")}} コンストラクタのプロトタイプオブジェクトは全ての {{jsxref( "WebAssembly.Memory")}} インスタンスに影響するように変更可能です。</p> + +<h2 id="プロパティ">プロパティ</h2> + +<dl> + <dt><code>Memory.prototype.constructor</code></dt> + <dd>このオブジェクトのインスタンスを生成した関数を返します。デフォルトでは {{jsxref("WebAssembly.Memory()")}} コンストラクタです。</dd> + <dt>{{jsxref("WebAssembly/Memory/buffer","Memory.prototype.buffer")}}</dt> + <dd>メモリーに格納されているバッファを返すアクセサプロパティ。</dd> + <dt> + <h2 id="メソッド">メソッド</h2> + </dt> + <dt>{{jsxref("WebAssembly/Memory/grow","Memory.prototype.grow()")}}</dt> + <dd>指定した WebAssembly ページの数 (64KBを1単位とする) で <code>Memory</code> インスタンスのサイズを増やします。</dd> +</dl> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#webassemblymemory-objects', 'Memory')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>初回ドラフト定義</td> + </tr> + </tbody> +</table> + +<h2 id="ブラウザ実装状況">ブラウザ実装状況</h2> + +<div> + + +<p>{{Compat("javascript.builtins.WebAssembly.Memory.prototype")}}</p> +</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li>{{jsxref("WebAssembly.Memory()")}}</li> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssemblyのコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/module/customsections/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/module/customsections/index.html new file mode 100644 index 0000000000..757c3e33e4 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/module/customsections/index.html @@ -0,0 +1,144 @@ +--- +title: WebAssembly.Module.customSections() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/customSections +--- +<div>{{JSRef}}{{SeeCompatTable}}</div> + +<p><strong><code>WebAssembly.customSections()</code></strong> 関数はモジュールと文字列名を指定して、全てのカスタムセクションのコンテンツのコピーを返します。</p> + +<h2 id="構文">構文</h2> + +<pre class="syntaxbox">var custSec = WebAssembly.Module.customSections(<em>module</em>, <em>sectionName</em>);</pre> + +<h3 id="パラメータ">パラメータ</h3> + +<dl> + <dt><em>module</em></dt> + <dd>カスタムセクションが考慮されている {{jsxref("WebAssembly.Module")}} オブジェクト。</dd> + <dt><em>sectionName</em></dt> + <dd>目的のカスタムセクションの文字列名。</dd> +</dl> + +<h3 id="戻り値">戻り値</h3> + +<p><code>sectionName</code> にマッチした全てのカスタムセクションの {{domxref("ArrayBuffer")}} コピーの配列 (もしかしたら空の場合もあります) 。</p> + +<h3 id="例外">例外</h3> + +<p>もし <code>module</code> が {{jsxref("WebAssembly.Module")}} オブジェクトインスタンスでない場合、{{jsxref("TypeError")}} がスローされます。</p> + +<h2 id="カスタムセクション">カスタムセクション</h2> + +<p>wasm モジュールは一連の <strong>セクション</strong> で構成されています。これらのセクションのほとんどは wasm の仕様によって完全に指定、バリデーションされますが、バリデーション中に無視されスキップされる <strong>カスタムセクション</strong> をモジュールに含めることができます (通常のセクション("既知のセクション")とカスタムセクションを区別するための情報は <a href="https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#high-level-structure">高レベルの構造</a> を読んでください)。</p> + +<p>これにより開発者は他の目的のために wasm モジュール内にカスタムデータを含めることができます。例えば、開発者がモジュール内の全ての関数とローカル変数に名前を付けられる (ネイティブビルドにおける "シンボル" のようなもの) <a href="https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#name-section">ネームカスタムセクション</a> のようなものがあります 。</p> + +<p>Note that the WebAssembly テキストフォーマットには現在新しいカスタムセクションのための構文の仕様がありません。しかし、テキストフォーマットから .wasm に変換するときに wasm にネームセクションを追加することができます。<a href="https://github.com/webassembly/wabt">wabt tool</a> の一部である wast2wasm コマンドで <code>--debug-names</code> オプションを指定することができます。これを指定することにより、ネームカスタムセクションを持つ .wasm に変換することができます:</p> + +<pre class="brush: bash">wast2wasm simple-name-section.was -o simple-name-section.wasm --debug-names</pre> + +<h2 id="例">例</h2> + +<p>次の例では(custom-section.html の <a href="https://github.com/mdn/webassembly-examples/blob/master/other-examples/custom-section.html">ソース</a> と <a href="https://mdn.github.io/webassembly-examples/other-examples/custom-section.html">動作例</a> をご確認ください) 、ロードした section.wasm バイトコードをコンパイルしています。</p> + +<p>それから、<code>WebAssembly.Module.customSections</code> を使用して <code>length</code> が0より大きいかチェックして、モジュールに "name" カスタムセクションが含まれているかどうかチェックします。この例では "name" カスタムセクションが存在するため、<code>ArrayBuffer</code> オブジェクトが返されます。</p> + +<pre class="brush: js">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]); + }; +});</pre> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#webassemblymodulecustomsections', 'customSections()')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>初回ドラフト定義。</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2> + +<div>{{CompatibilityTable}}</div> + +<div id="compat-desktop"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Chrome</th> + <th>Edge</th> + <th>Firefox (Gecko)</th> + <th>Internet Explorer</th> + <th>Opera</th> + <th>Safari (WebKit)</th> + </tr> + <tr> + <td>基本サポート</td> + <td>57</td> + <td>15<sup>[2]</sup></td> + <td>{{CompatGeckoDesktop(52)}}<sup>[1]</sup></td> + <td>{{CompatNo}}</td> + <td>44</td> + <td>11</td> + </tr> + </tbody> +</table> +</div> + +<div id="compat-mobile"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Chrome for Android</th> + <th>Android Webview</th> + <th>Edge Mobile</th> + <th>Firefox Mobile (Gecko)</th> + <th>IE Mobile</th> + <th>Opera Mobile</th> + <th>Safari Mobile</th> + </tr> + <tr> + <td>基本サポート</td> + <td>57</td> + <td>57</td> + <td>{{CompatNo}}</td> + <td>{{CompatGeckoMobile(52)}}<sup>[1]</sup></td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>11</td> + </tr> + </tbody> +</table> +</div> + +<p>[1] WebAssemblyはFirefox 52+で有効です。<a href="https://www.mozilla.org/en-US/firefox/organizations/">Firefox 52 Extended Support Release</a> (ESR.)では無効化されています。</p> + +<p>[2] 現在、“Experimental JavaScript Features” フラグを付けることでサポートされます。詳細については <a href="https://blogs.windows.com/msedgedev/2017/04/20/improved-javascript-performance-webassembly-shared-memory/">このブログ記事</a> を参照してください。</p> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly のコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> 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 new file mode 100644 index 0000000000..fb852a1a29 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/module/exports/index.html @@ -0,0 +1,109 @@ +--- +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 +--- +<div>{{JSRef}} {{ SeeCompatTable}}</div> + +<p><strong><code>WebAssembly.exports()</code></strong> 関数は指定した <code>Module</code> のエクスポート宣言の定義の配列を返します。</p> + +<h2 id="構文">構文</h2> + +<pre class="syntaxbox">var exports = WebAssembly.Module.exports(module);</pre> + +<h3 id="パラメータ">パラメータ</h3> + +<dl> + <dt><em>module</em></dt> + <dd>{{jsxref("WebAssembly.Module")}} オブジェクト。</dd> +</dl> + +<h3 id="戻り値">戻り値</h3> + +<p>指定したモジュールのエクスポートされた関数を表現するオブジェクトの配列。</p> + +<h3 id="例外">例外</h3> + +<p>もしモジュールが {{jsxref("WebAssembly.Module")}} オブジェクトインスタンス出ない場合、{{jsxref("TypeError")}} がスローされます。</p> + +<h2 id="例">例</h2> + +<p>次の例では (Github のデモ <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/index-compile.html">index-compile.html</a> と、<a href="https://mdn.github.io/webassembly-examples/js-api-examples/index-compile.html">動作例</a> もご確認ください) {{jsxref("WebAssembly.compile()")}} 関数を使用してロードした simple.wasm をコンパイルして、 <a href="/ja/docs/Web/API/Worker/postMessage">postMessage()</a> を使用してそれを <a href="https://developer.mozilla.org/ja/docs/Web/API/Web_Workers_API">worker</a> に送信しています。</p> + +<pre class="brush: 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) +);</pre> + +<p>worker (<code><a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/wasm_worker.js">wasm_worker.js</a></code> を参照) 内で、モジュールで使用するためにインポートオブジェクトを定義して、そのあとにメインスレッドからモジュールを受け取るためのイベントハンドラをセットアップします。モジュールを受け取ったとき、{{jsxref("WebAssembly.Instantiate()")}} メソッドを使用してインスタンスを生成し、その内部でエクスポートされた関数を実行します。そのあとに <code>WebAssembly.Module.exports</code> を使用してモジュール上の利用可能なエクスポートの情報を返す方法を示します。</p> + +<pre class="brush: 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]); +};</pre> + +<p><code>exports[0]</code> のアウトプットはこのようになります:</p> + +<pre class="brush: js">{ name: "exported_func", kind: "function" }</pre> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#webassemblymoduleexports', 'exports()')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>Initial draft definition.</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2> + +<div>{{Compat("javascript.builtins.WebAssembly.Module.exports")}}</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly のコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/module/imports/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/module/imports/index.html new file mode 100644 index 0000000000..2d2cea9f08 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/module/imports/index.html @@ -0,0 +1,83 @@ +--- +title: WebAssembly.Module.imports() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/imports +tags: + - API + - JavaScript + - Method + - Module + - Object + - Reference + - WebAssembly + - imports + - メソッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module/imports +--- +<div>{{JSRef}}</div> + +<p><strong><code>WebAssembly.imports()</code></strong> 関数は、指定した <code>Module</code> の全てのインポート宣言の定義を配列として返します。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">WebAssembly.Module.imports(module);</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><em>module</em></dt> + <dd>{{jsxref("WebAssembly.Module")}} オブジェクトです。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定したモジュールのインポートされた関数を表現するオブジェクトの配列。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>もしモジュールが {{jsxref("WebAssembly.Module")}} オブジェクトのインスタンスでなければ {{jsxref("TypeError")}} が発生します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<p>次の例では (imports.html の <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/imports.html">ソースコード</a> と <a href="https://mdn.github.io/webassembly-examples/js-api-examples/imports.html">動作例</a> もご確認ください) ロードした simple.wasm モジュールをコンパイルした後、インポート宣言を問い合わせています。</p> + +<pre class="brush: js">WebAssembly.compileStreaming(fetch('simple.wasm')) +.then(function(mod) { + var imports = WebAssembly.Module.imports(mod); + console.log(imports[0]); +}); +</pre> + +<p>出力結果は次のようになります。</p> + +<pre class="brush: js">{ module: "imports", name: "imported_func", kind: "function" }</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-module-imports', 'imports()')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div> +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Module.imports")}}</p> +</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/module/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/module/index.html new file mode 100644 index 0000000000..3db453a95d --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/module/index.html @@ -0,0 +1,97 @@ +--- +title: WebAssembly.Module +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module +tags: + - API + - Constructor + - Experimental + - JavaScript + - Module + - Reference + - WebAssembly +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Module +--- +<div>{{JSRef}}</div> + +<p><strong><code>WebAssembly.Module</code></strong> オブジェクトには、ブラウザーでコンパイルされたステートレスな WebAssembly コードが含まれています。これを効率的に<a href="/ja/docs/Web/API/Worker/postMessage">ワーカー間で共有</a>したり、複数回インスタンス化したりすることができます。</p> + +<h2 id="Constructor" name="Constructor">コンストラクター</h2> + +<dl> + <dt>{{jsxref("Global_Objects/WebAssembly/Module/Module", "WebAssembly.Module()")}}</dt> + <dd>新しい <code>Module</code> オブジェクトを生成します。</dd> +</dl> + +<h2 id="Static_properties" name="Static_properties">静的プロパティ</h2> + +<dl> + <dt>{{jsxref("Global_Objects/WebAssembly/Module/customSections", "WebAssembly.Module.customSections()")}}</dt> + <dd><code>Module</code> と文字列を指定すると、モジュール内の与えられた文字列を名前に持つ全てのカスタムセクションの内容を返します。</dd> + <dt>{{jsxref("Global_Objects/WebAssembly/Module/exports", "WebAssembly.Module.exports()")}}</dt> + <dd><code>Module</code> を指定すると、エクスポート宣言の情報を配列として返します。</dd> + <dt>{{jsxref("Global_Objects/WebAssembly/Module/imports", "WebAssembly.Module.imports()")}}</dt> + <dd><code>Module</code> を指定すると、インポート宣言の情報を配列として返します。</dd> +</dl> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Sending_a_compiled_module_to_a_worker" name="Sending_a_compiled_module_to_a_worker">コンパイル済みのモジュールをワーカーに送信</h3> + +<p>以下の例では (GitHub 上の <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/index-compile.html">index-compile.html</a> および<a href="https://mdn.github.io/webassembly-examples/js-api-examples/index-compile.html">ライブ表示</a>も参照してください)、読み込まれた <code>simple.wasm</code> のバイトコードを {{jsxref("WebAssembly.compileStreaming()")}} メソッドでコンパイルし、結果の <code>Module</code> インスタンスを<a href="/ja/docs/Web/API/Web_Workers_API">ワーカー</a>へ、 {{domxref("Worker/postMessage", "postMessage()")}} を使用して送信します。</p> + +<pre class="brush: js notranslate">var worker = new Worker("wasm_worker.js"); + +WebAssembly.compileStreaming(fetch('simple.wasm')) +.then(mod => + worker.postMessage(mod) +);</pre> + +<p>ワーカー内では (<code><a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/wasm_worker.js">wasm_worker.js</a></code> を参照)、モジュールを使用するための import オブジェクトを定義し、メインスレッドからモジュールを受け取るためのイベントハンドラーをセットアップします。モジュールを受け取ったら、 {{jsxref("WebAssembly.instantiate()")}} メソッドを使ってインスタンスを作成し、その中からエクスポートされた関数を呼び出します。</p> + +<pre class="brush: js notranslate">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(); + }); +};</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#modules', 'WebAssembly.Module()')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div> +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Module")}}</p> +</div> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/runtimeerror/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/runtimeerror/index.html new file mode 100644 index 0000000000..9b0b408383 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/runtimeerror/index.html @@ -0,0 +1,107 @@ +--- +title: WebAssembly.RuntimeError() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/RuntimeError +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/RuntimeError +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p><code><strong>WebAssembly.RuntimeError()</strong></code> コンストラクタは WebAssembly <code>RuntimeError</code> オブジェクトを生成します。WebAssembly で定義されている <a href="http://webassembly.org/docs/semantics/#traps">トラップ</a> が発生するごとにスローされます。</p> + +<h2 id="構文">構文</h2> + +<pre class="syntaxbox">new WebAssembly.RuntimeError(<var>message</var>, <var>fileName</var>, <var>lineNumber</var>)</pre> + +<h3 id="パラメータ">パラメータ</h3> + +<dl> + <dt><code>message</code> {{optional_inline}}</dt> + <dd>ヒューマンリーダブルなエラーの説明。</dd> + <dt><code>fileName</code> {{optional_inline}}{{non-standard_inline}}</dt> + <dd>例外の原因となったコードを含むファイルの名前。</dd> + <dt><code>lineNumber</code> {{optional_inline}}{{non-standard_inline}}</dt> + <dd>例外の原因となったコードの行番号。</dd> +</dl> + +<h2 id="プロパティ">プロパティ</h2> + +<p><em><code>RuntimeError</code> コンストラクタは自身のプロパティを持ちませんが、プロトタイプチェーンを通していくつかのプロパティを継承します。</em></p> + +<dl> + <dt><code>WebAssembly.RuntimeError.prototype.constructor</code></dt> + <dd>インスタンスのプロトタイプを生成した関数を示します。</dd> + <dt>{{jsxref("Error.prototype.message", "WebAssembly.RuntimeError.prototype.message")}}</dt> + <dd>エラーメッセージ。ECMA-262 では {{jsxref("URIError")}} は自身の <code>message</code> プロパティを提供する必要がありますが、<a href="/en-US/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> では {{jsxref("Error.prototype.message")}} を継承します。</dd> + <dt>{{jsxref("Error.prototype.name", "WebAssembly.RuntimeError.prototype.name")}}</dt> + <dd>エラー名。 {{jsxref("Error")}}.</dd> + <dt>{{jsxref("Error.prototype.fileName", "WebAssembly.RuntimeError.prototype.fileName")}}</dt> + <dd>このエラーを発生させたファイルのパス。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.lineNumber", "WebAssembly.RuntimeError.prototype.lineNumber")}}</dt> + <dd>このエラーを発生させたファイルの行番号。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.columnNumber", "WebAssembly.RuntimeError.prototype.columnNumber")}}</dt> + <dd>このエラーが発生した行の列番号。<a href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Error" title="Error コンストラクターは、エラーオブジェクトを生成します。Error オブジェクトのインスタンスは、ランタイムエラーが発生した時に投げられます。Error オブジェクトは、ユーザー定義の例外の基底オブジェクトとして使用することもできます。標準の組み込みエラー型については下記を参照してください。"><code>Error</code></a> から継承されます。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.stack", "WebAssembly.RuntimeError.prototype.stack")}}</dt> + <dd>スタックトレース。{{jsxref("Error")}} から継承されます。</dd> +</dl> + +<h2 id="メソッド">メソッド</h2> + +<p><em><code>RuntimeError</code> コンストラクタは自身のメソッドを持ちませんが、プロトタイプチェーンを通していくつかのメソッドを継承します。</em></p> + +<dl> + <dt>{{jsxref("Error.prototype.toSource", "WebAssembly.RuntimeError.prototype.toSource()")}}</dt> + <dd>同じエラーを評価できるコードを返します。{{jsxref("Error")}} から継承されます。</dd> + <dt>{{jsxref("Error.prototype.toString", "WebAssembly.RuntimeError.prototype.toString()")}}</dt> + <dd>指定された <code>Error</code> オブジェクトを表す文字列を返します。{{jsxref("Error")}} から継承されます。</dd> +</dl> + +<h2 id="例">例</h2> + +<p>以下のスニペットで <code>RuntimeError</code> インスタンスを生成して、詳細をコンソールに表示します。</p> + +<pre class="brush: js">try { + throw new WebAssembly.RuntimeError('Hello', 'someFile', 10); +} catch (e) { + console.log(e instanceof 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); // コードが実行された場所を返す +}</pre> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#constructor-properties-of-the-webassembly-object', 'WebAssembly constructors')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>WebAssembly の初回ドラフト定義。</td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard', 'NativeError')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td>標準の NativeError 型の定義。</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2> + +<div>{{Compat("javascript.builtins.WebAssembly.RuntimeError")}}</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly のコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/get/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/get/index.html new file mode 100644 index 0000000000..fa797cb7a6 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/get/index.html @@ -0,0 +1,79 @@ +--- +title: WebAssembly.Table.prototype.get() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/get +tags: + - API + - JavaScript + - Method + - Reference + - WebAssembly + - get + - table + - メソッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/get +--- +<div>{{JSRef}}</div> + +<p><code><strong>get()</strong></code> は {{jsxref("WebAssembly.Table")}} オブジェクトのプロトタイプメソッドで、指定されたインデックスに格納された関数参照を取得します。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">table.get(<em>index</em>); +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><em>index</em></dt> + <dd>取得する関数参照のインデックス。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>関数参照を返します。これは <a href="/ja/docs/WebAssembly/Exported_functions">エクスポートされた WebAssembly 関数</a> 、wasm 関数を内在する JavaScript ラッパーです。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>もし <em>index</em> が {{jsxref("WebAssembly/Table/length","Table.prototype.length")}} 以上だった場合、{{jsxref("RangeError")}} をスローします。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<p>次の例では (Github の <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/table.html">table.html</a> と <a href="https://mdn.github.io/webassembly-examples/js-api-examples/table.html">動作例</a> も確認してください)、<code><a href="https://github.com/mdn/webassembly-examples/blob/master/wasm-utils.js">fetchAndInstantiate()</a></code> ユーティリティ関数を使用して table.wasm バイトコードをロード、コンパイルして、インスタンス化しています。その後、エクスポートされたテーブルに格納された参照を取得します。</p> + +<pre class="brush: js">WebAssembly.instantiateStreaming(fetch('table.wasm')) +.then(function(obj) { + var tbl = obj.instance.exports.tbl; + console.log(tbl.get(0)()); // 13 + console.log(tbl.get(1)()); // 42 +});</pre> + +<p>参照内に格納されている値を実際に取得するためには、アクセサの最後に2つ目の関数呼び出し演算子を含める必要があります(<code>get(0)</code> ではなく <code>get(0)()</code>) 。これは単純な値ではなく、関数です。</p> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-table-get', 'get()')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Table.get")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/grow/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/grow/index.html new file mode 100644 index 0000000000..4819f33086 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/grow/index.html @@ -0,0 +1,79 @@ +--- +title: WebAssembly.Table.prototype.grow() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/grow +tags: + - API + - JavaScript + - Method + - Reference + - WebAssembly + - grow + - table + - メソッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/grow +--- +<div>{{JSRef}}</div> + +<p><code><strong>grow()</strong></code> は {{jsxref("WebAssembly.Table")}} オブジェクトのプロトタイプメソッドで、指定された要素数でテーブルを拡張します。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">table.grow(<em>number</em>); +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><em>number</em></dt> + <dd>テーブルを拡張する要素数。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>以前のテーブルの長さ。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<p>もし <code>grow()</code> 操作が何かしらの理由で失敗した場合、{{jsxref("RangeError")}} をスローします。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<p>次の例では、初期サイズが2で最大サイズが10の WebAssembly Table を作成しています。</p> + +<pre class="brush: js">var table = new WebAssembly.Table({ element: "anyfunc", initial: 2, maximum: 10 });</pre> + +<p>次のようにすることで、テーブルのサイズを1拡張することができます:</p> + +<pre class="brush: js">console.log(table.length); // "2" +console.log(table.grow(1)); // "2" +console.log(table.length); // "3" +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-table-grow', 'grow()')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Table.set")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/index.html new file mode 100644 index 0000000000..963a942b65 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/index.html @@ -0,0 +1,126 @@ +--- +title: WebAssembly.Table() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table +--- +<div>{{JSRef}}</div> + +<p><code><strong>WebAssembly.Table()</strong></code> コンストラクタは与えられたサイズと要素の型から <code>Table</code> オブジェクトを生成します。</p> + +<p>これは、配列ライクな構造で表現された WebAssembly テーブルの JavaScript ラッパーオブジェクトです。JavaScript か WebAssembly コード上で生成されたテーブルは JavaScript、WebAssembly の両方からアクセス、変更可能です。</p> + +<div class="note"> +<p><strong>注</strong>: 現在、テーブルには関数の参照のみ格納できます。しかし、将来的に拡張される予定です。</p> +</div> + +<h2 id="構文">構文</h2> + +<pre class="syntaxbox">var myTable = new WebAssembly.Table(tableDescriptor);</pre> + +<h3 id="パラメータ">パラメータ</h3> + +<dl> + <dt><em>tableDescriptor</em></dt> + <dd>以下のメンバーを含むことができるオブジェクト: + <dl> + <dt><em>element</em></dt> + <dd>テーブルに格納する値の型の文字列表現。現在は、<code>"anyfunc"</code> (関数) のみ設定できます。</dd> + <dt><em>initial</em></dt> + <dd>WebAssembly テーブルの初期要素数。</dd> + <dt><em>maximum {{optional_inline}}</em></dt> + <dd>WebAssembly テーブルが拡張できる要素の最大数。</dd> + </dl> + </dd> +</dl> + +<h3 id="例外">例外</h3> + +<ul> + <li>もし <code>tableDescriptor</code> がオブジェクト型でない場合、{{jsxref("TypeError")}} がスローされます。</li> + <li>もし <code>maximum</code> 定義されていて <code>initial</code> よりも小さい場合、{{jsxref("RangeError")}} がスローされます。</li> +</ul> + +<h2 id="Table_インスタンス"><code>Table</code> インスタンス</h2> + +<p>全ての <code>Table</code> インスタンスは <code>Table()</code>コンストラクタの <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/prototype">プロトタイプオブジェクト</a> を継承します。これは全ての <code>Table</code> インスタンスに影響するように変更可能です。</p> + +<h3 id="インスタンスプロパティ">インスタンスプロパティ</h3> + +<dl> + <dt><code>Table.prototype.constructor</code></dt> + <dd>このオブジェクトのインスタンスを生成した関数を返します。デフォルトでは {{jsxref("WebAssembly.Table()")}} コンストラクタです。</dd> + <dt>{{jsxref("Global_Objects/WebAssembly/Table/length","Table.prototype.length")}}</dt> + <dd>テーブルの長さを返します。すなわち、要素数です。</dd> +</dl> + +<h3 id="インスタンスメソッド">インスタンスメソッド</h3> + +<dl> + <dt>{{jsxref("Global_Objects/WebAssembly/Table/get","Table.prototype.get()")}}</dt> + <dd>アクセサ関数。インデックスから格納された要素を取得します。</dd> + <dt>{{jsxref("Global_Objects/WebAssembly/Table/grow","Table.prototype.grow()")}}</dt> + <dd>指定した要素数で Table インスタンスを拡張します。</dd> + <dt>{{jsxref("Global_Objects/WebAssembly/Table/set","Table.prototype.set()")}}</dt> + <dd>指定したインデックスに要素を格納します。</dd> +</dl> + +<h2 id="例">例</h2> + +<p>以下の例 (table2.htmlの <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/table2.html">ソースコード</a> と <a href="https://mdn.github.io/webassembly-examples/js-api-examples/table2.html">動作例</a> を参照) では初期サイズが2の WebAssembly Table インスタンスを生成しています。次に、テーブルの長さと2つのインデックスの内容を表示しています (長さが2で両方の要素が {{jsxref("null")}} であることを確認するために、{{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} を使って読み込んでいます) 。</p> + +<pre class="brush: js">var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"}); +console.log(tbl.length); // "2" +console.log(tbl.get(0)); // "null" +console.log(tbl.get(1)); // "null"</pre> + +<p>次に、テーブルを含むインポートオブジェクトを作ります:</p> + +<pre class="brush: js">var importObj = { + js: { + tbl:tbl + } +};</pre> + +<p>最後に {{jsxref("WebAssembly.instantiateStreaming()")}} を使用して wasm モジュール (table2.wasm) をロード し、インスタンス化します。table2.wasm モジュールは2の関数を持っていて (1つは42を、もう1つは83を返す) 、インポートされたテーブルの0、1番目に両方の要素が格納されます (<a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/table2.wat">text representation</a>を参照) 。そして、インスタンス化された後、テーブルの長さは2のままです。しかし、今はJSから呼び出し可能な <a href="/en-US/docs/WebAssembly/Exported_functions">エクスポートされたWebAssembly関数</a> が含まれています。</p> + +<pre class="brush: js">WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject) +.then(function(obj) { + console.log(tbl.length); + console.log(tbl.get(0)()); + console.log(tbl.get(1)()); +});</pre> + +<p>内部の値を表示するためには、参照された関数のアクセサの呼び出しの後に、2つ目の関数呼び出しを含める必要があることに注意して下さい (<code>get(0)</code> ではなく <code>get(0)()</code>)。</p> + +<p>この例では、JavaScript からテーブルを作成してアクセスしていますが、wasm インスタンス内で同じテーブルを参照して呼び出すこともできます。</p> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#webassemblytable-objects', 'Table')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>初回ドラフト定義。</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2> + +<div>{{Compat("javascript.builtins.WebAssembly.Table")}}</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="https://developer.mozilla.org/ja/docs/WebAssembly/Concepts">WebAssembly のコンセプト</a></li> + <li><a href="https://developer.mozilla.org/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/length/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/length/index.html new file mode 100644 index 0000000000..8d6c3ae6c9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/length/index.html @@ -0,0 +1,63 @@ +--- +title: WebAssembly.Table.prototype.length +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/length +tags: + - API + - JavaScript + - Property + - Reference + - length + - table + - プロパティ +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/length +--- +<div>{{JSRef}}</div> + +<p>{{jsxref("WebAssembly.Table")}} オブジェクトの <code><strong>length</strong></code> プロトタイププロパティはテーブルの長さを返します。すなわち、テーブルの要素数です。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">table.length; +</pre> + +<h2 id="Examples" name="Examples">例</h2> + +<p>次の例では、初期サイズが2で最大サイズが10の WebAssembly Table を作成しています。</p> + +<pre class="brush: js">var table = new WebAssembly.Table({ element: "anyfunc", initial: 2, maximum: 10 });</pre> + +<p>次のようにすることで、テーブルのサイズを1拡張することができます:</p> + +<pre class="brush: js">console.log(table.length); // "2" +console.log(table.grow(1)); // "2" +console.log(table.length); // "3" +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-table-length', 'length')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Table.length")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/prototype/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/prototype/index.html new file mode 100644 index 0000000000..8a178f1ce3 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/prototype/index.html @@ -0,0 +1,74 @@ +--- +title: WebAssembly.Table.prototype +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/prototype +tags: + - JavaScript + - Property + - Prototype + - WebAssembly + - table +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p><code><strong>WebAssembly.Table</strong></code><strong><code>.prototype</code></strong> プロパティは {{jsxref("WebAssembly.Table()")}} コンストラクタのプロトタイプを表します。</p> + +<div>{{js_property_attributes(0, 0, 0)}}</div> + +<h2 id="説明">説明</h2> + +<p>全ての {{jsxref("WebAssembly.Table")}} インスタンスは <code>Table.prototype</code> を継承します。{{jsxref("WebAssembly.Table()")}} コンストラクタのプロトタイプオブジェクトは全ての {{jsxref( "WebAssembly.Table")}} インスタンスに影響するように変更可能です。</p> + +<h2 id="プロパティ">プロパティ</h2> + +<dl> + <dt><code>Table.prototype.constructor</code></dt> + <dd>このオブジェクトのインスタンスを生成した関数を返します。デフォルトでは {{jsxref("WebAssembly.Table()")}} コンストラクタです。</dd> + <dt>{{jsxref("WebAssembly/Table/length","Table.prototype.length")}}</dt> + <dd>テーブルの長さを返します。すなわち、要素数です。</dd> + <dt> + <h2 id="メソッド">メソッド</h2> + </dt> + <dt>{{jsxref("WebAssembly/Table/get","Table.prototype.get()")}}</dt> + <dd>アクセサ関数。インデックスから格納された要素を取得します。</dd> + <dt>{{jsxref("WebAssembly/Table/grow","Table.prototype.grow()")}}</dt> + <dd>指定した要素数で Table インスタンスを拡張します。</dd> + <dt>{{jsxref("WebAssembly/Table/set","Table.prototype.set()")}}</dt> + <dd>指定したインデックスに要素を格納します。</dd> +</dl> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#webassemblytable-objects', 'Table')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>初回ドラフト定義</td> + </tr> + </tbody> +</table> + +<h2 id="ブラウザ実装状況">ブラウザ実装状況</h2> + +<div> + + +<p>{{Compat("javascript.builtins.WebAssembly.Table.prototype")}}</p> +</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li>{{jsxref("WebAssembly.Table")}}</li> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssemblyのコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/set/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/set/index.html new file mode 100644 index 0000000000..681c1b6ed7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/set/index.html @@ -0,0 +1,101 @@ +--- +title: WebAssembly.Table.prototype.set() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/set +tags: + - API + - JavaScript + - Method + - Reference + - WebAssembly + - set + - table + - メソッド +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/set +--- +<div>{{JSRef}}</div> + +<p>{{jsxref("WebAssembly.Table")}} オブジェクトの <code><strong>set()</strong></code> プロトタイプメソッドは指定されたインデックスに格納されている参照を違う値に変更します。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">table.set(<em>index</em>, <em>value</em>); +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><em>index</em></dt> + <dd>変更する関数参照のインデックス。</dd> + <dt><em>value</em></dt> + <dd>変更する参照。これは <a href="/ja/docs/WebAssembly/Exported_functions">エクスポートされた WebAssembly 関数</a> 、 wasm 関数を内在する JavaScript ラッパーである必要があります。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>なし。</p> + +<h3 id="Exception" name="Exception">例外</h3> + +<ul> + <li><em>index</em> が {{jsxref("Global_Objects/WebAssembly/Table/length","Table.prototype.length")}} の場合、 {{jsxref("RangeError")}} がスローされます。</li> + <li><em>value</em> がエクスポートされた WebAssembly 関数でも <code><a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/null">null</a></code> でもない場合、{{jsxref("TypeError")}} をスローします。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<p>次の例では、2つ参照を持つ WebAssembly Table インスタンスを生成しています (table2.html <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/table2.html">ソースコード</a> と <a href="https://mdn.github.io/webassembly-examples/js-api-examples/table2.html">動作例</a> を確認してください) 。それから、長さが2で、関数参照が含まれないこと ({{jsxref("null")}} を返します) を確認するために、テーブルの長さと2つのインデックス ({{jsxref("Global_Objects/WebAssembly/Table/get","Table.prototype.get()")}} を通して読み出して) のコンテンツを表示します。</p> + +<pre class="brush: js">var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"}); +console.log(tbl.length); +console.log(tbl.get(0)); +console.log(tbl.get(1));</pre> + +<p>次にテーブルの参照を含むインポートオブジェクトを作成します:</p> + +<pre class="brush: js">var importObj = { + js: { + tbl:tbl + } +};</pre> + +<p>最後に、<code><a href="https://github.com/mdn/webassembly-examples/blob/master/wasm-utils.js">fetchAndInstantiate()</a></code> ユーティリティ関数を使用して wasm モジュール (table2.wasm) をロードしてインスタンス化します。テーブルの長さを表示して、いまテーブルに格納された(table2.wasm モジュール (<a href="https://github.com/mdn/webassembly-examples/blob/master/text-format-examples/table2.was">テキスト表現</a> を参照) はテーブルに2つの関数参照を追加し、両方とも、簡単な数値を表示します)2つの関数参照を実行します:</p> + +<pre class="brush: js">WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject) +.then(function(obj) { + console.log(tbl.length); + console.log(tbl.get(0)()); + console.log(tbl.get(1)()); +});</pre> + +<p>内部の値を表示するためには、参照された関数のアクセサの呼び出しの後に、2つ目の関数呼び出しを含める必要があることに注意して下さい (<code>get(0)</code> ではなく <code>get(0)()</code>)。</p> + +<p>この例では、JavaScript からテーブルを作成してアクセスしていますが、wasm インスタンス内で同じテーブルを参照して呼び出すこともできます。</p> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-table-set', 'set()')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Table.set")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/table/table/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/table/table/index.html new file mode 100644 index 0000000000..e293ab5bd1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/table/table/index.html @@ -0,0 +1,100 @@ +--- +title: WebAssembly.Table() コンストラクター +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/Table +tags: + - Constructor + - JavaScript + - Reference + - WebAssembly + - コンストラクター +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/Table +--- +<div>{{JSRef}}</div> + +<p><code><strong>WebAssembly.Table()</strong></code> コンストラクターは、大きさと要素の型を指定して新しい <code>Table</code> オブジェクトを生成します。</p> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">new WebAssembly.Table(tableDescriptor);</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><em>tableDescriptor</em></dt> + <dd>以下のメンバーを含むことができるオブジェクトです。 + <dl> + <dt><em>element</em></dt> + <dd>文字列で、テーブルに格納される値の型を表します。現時点では、 "<code>anyfunc</code>" (関数) の値のみを取ることができます。</dd> + <dt><em>initial</em></dt> + <dd>WebAssembly テーブルの初期の要素数です。</dd> + <dt><em>maximum {{optional_inline}}</em></dt> + <dd>WebAssembly テーブルが拡張する最大の要素数です。</dd> + </dl> + </dd> +</dl> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<ul> + <li><code>tableDescriptor</code> がオブジェクトでない場合は、 {{jsxref("TypeError")}} が発生します。</li> + <li><code>maximum</code> が設定されており、かつ <code>initial</code> よりも小さい場合は、 {{jsxref("RangeError")}} が発生します。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<p>次の例では (table2.html の <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/table2.html">ソースコード</a> と <a href="https://mdn.github.io/webassembly-examples/js-api-examples/table2.html">デモ版</a>) 新しく WebAssembly テーブルのインスタンスを、2要素を初期の大きさとして生成します。それからテーブルの長さと2つの要素の中身を ({{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} で取得して) 表示し、長さは2で2つの要素は共に {{jsxref("null")}} となります。</p> + +<pre class="brush: js">var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"}); +console.log(tbl.length); // "2" +console.log(tbl.get(0)); // "null" +console.log(tbl.get(1)); // "null"</pre> + +<p>それからテーブルを含むインポートオブジェクトを作成します。</p> + +<pre class="brush: js">var importObj = { + js: { + tbl:tbl + } +};</pre> + +<p>最終的に、 wasm モジュール (table2.wasm) を {{jsxref("WebAssembly.instantiateStreaming()")}} メソッドを使用して読み込みインスタンス化します。 table2.wasm モジュールには2つの関数 (1つは 42 を返し、もう1つは 83 を返す) が入っており、それぞれをインポートされたテーブルの要素 0 と 1 に格納します。 (<a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/table2.wat">テキスト表示</a> をご覧ください)。インスタンス化した後で、テーブルは長さが2のままですが、要素には呼び出し可能な<a href="/ja/docs/WebAssembly/Exported_functions">エクスポートされた WebAssembly 関数</a>が入り、 JS から呼び出せるようになりました。</p> + +<pre class="brush: js">WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject) +.then(function(obj) { + console.log(tbl.length); + console.log(tbl.get(0)()); + console.log(tbl.get(1)()); +});</pre> + +<p>なお、関数呼び出し演算子がアクセサーの後に二重についており、実際に参照している関数を呼び出して、その中に格納された値をログ出力しています (例えば <code>get(0)()</code> を <code>get(0)</code> の代わりに使用)。</p> + +<p>この例は JavaScript からテーブルを生成してアクセスする方法を示していますが、同じテーブルを wasm インスタンスの中から見ることができ、呼び出すこともできます。</p> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#dom-table-table', 'Table')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.WebAssembly.Table.Table")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> 概要ページ</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly の概念</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API の使用</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/webassembly/validate/index.html b/files/ja/web/javascript/reference/global_objects/webassembly/validate/index.html new file mode 100644 index 0000000000..14a9631831 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/webassembly/validate/index.html @@ -0,0 +1,71 @@ +--- +title: WebAssembly.validate() +slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/validate +translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/validate +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p><strong><code>WebAssembly.validate()</code></strong> 関数は WebAssembly バイナリコードを含む <a href="/ja/docs/Web/JavaScript/Typed_arrays">型付き配列</a> をバリデーションし、バイト列が有効な wasm モジュール (<code>true</code>) か、そうでないか (<code>false</code>) を返します。</p> + +<h2 id="構文">構文</h2> + +<pre class="syntax">WebAssembly.validate(bufferSource);</pre> + +<h3 id="パラメータ">パラメータ</h3> + +<dl> + <dt><em>bufferSource</em></dt> + <dd>バリデーションする WebAssembly バイナリコードを含む <a href="/ja/docs/Web/JavaScript/Typed_arrays">型付き配列</a> か <a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer">ArrayBuffer</a> 。</dd> +</dl> + +<h3 id="戻り値">戻り値</h3> + +<p>有効な wasm モジュール (<code>true</code>) か、そうでないか (<code>false</code>) を示す boolean 値。</p> + +<h3 id="例外">例外</h3> + +<p><code>bufferSource</code> が <a href="/ja/docs/Web/JavaScript/Typed_arrays">型付き配列</a> か <a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer">ArrayBuffer</a> でない場合、{{jsxref("TypeError")}} がスローされます。</p> + +<h2 id="例">例</h2> + +<p>以下の例 (validate.html の <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/validate.html">ソースコード</a> と <a href="https://mdn.github.io/webassembly-examples/js-api-examples/validate.html">動作例</a> をご確認ください) は .wasm モジュールをフェッチして型付き配列に変換します。次に、 <code>validate()</code> メソッドを使用してモジュールが有効かどうかをチェックします。</p> + +<pre class="brush: js">fetch('simple.wasm').then(response => + response.arrayBuffer() +).then(function(bytes) { + var valid = WebAssembly.validate(bytes); + console.log("The given bytes are " + + (valid ? "" : "not ") + "a valid wasm module"); +}); +</pre> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様</th> + <th scope="col">策定状況</th> + <th scope="col">コメント</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#webassemblyvalidate', 'validate()')}}</td> + <td>{{Spec2('WebAssembly JS')}}</td> + <td>初回ドラフト定義。</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2> + +<div>{{Compat("javascript.builtins.WebAssembly.validate")}}</div> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li><a href="/ja/docs/WebAssembly">WebAssembly</a> overview page</li> + <li><a href="/ja/docs/WebAssembly/Concepts">WebAssembly のコンセプト</a></li> + <li><a href="/ja/docs/WebAssembly/Using_the_JavaScript_API">WebAssembly JavaScript API を使用する</a></li> +</ul> |