From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../global_objects/webassembly/global/index.html | 118 +++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 files/ja/web/javascript/reference/global_objects/webassembly/global/index.html (limited to 'files/ja/web/javascript/reference/global_objects/webassembly/global/index.html') 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 +--- +
{{JSRef}}
+ +

WebAssembly.Global はグローバル変数として存在し、JavaScript または {{jsxref("WebAssembly.Module")}} インスタンスから参照することができます。これにより動的に複数のモジュールをリンクすることができます。

+ +

コンストラクターの文法

+ +
var myGlobal = new WebAssembly.Global(descriptor, value);
+ +

パラメーター

+ +
+
descriptor
+
GlobalDescriptor 辞書オブジェクト、2 つの要素を持っている: +
    +
  • value: {{domxref("USVString")}} はグローバルデータ形式を表し値として i32i64f32f64 のうち一つを取ります。
  • +
  • mutable: グローバルがミュータブルかどうかの真偽値です。デフォルトでは false です。
  • +
+
+
value
+
変数が保持する値です。変数のデータ型に合う限りどんな値でも取れます。もしも何の値も渡されないと、DefaultValue algorithm で指定した時の様な 型ありの 0 が使われます。
+
+ +

グローバルコンストラクターによる関数プロパティ

+ +

無し

+ +

グローバルインスタンス

+ +

すべてのグローバルインスタンスは Global() コンストラクターのプロパティオブジェクトを受け継ぐ — これによりすべての Global インスタンスを変更できる

+ +

インスタンスプロパティ

+ +

{{page('/ja/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/prototype', 'Properties')}}

+ +

インスタンスメソッド

+ +

{{page('/ja/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Global/prototype', 'Methods')}}

+ +

+ +

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

+ +

その後この値は、Global.value プロパティを使うことによって 42 に、global.wasm モジュールから公開された incGlobal() 関数 (入力に限らず 1 を加算する) を使うことによって 43 になります。

+ +
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);
+});
+ +
+

メモ: GitHub 上で動くデモが試せます。ソースコードも確認してみてください。

+
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様策定状況コメント
{{SpecName('WebAssembly JS', '#globals', 'WebAssembly.Global()')}}{{Spec2('WebAssembly JS')}}初回ドラフト定義
+ +

ブラウザー実装状況

+ +
+ + +

{{Compat("javascript.builtins.WebAssembly.Global")}}

+
+ +

参考

+ + -- cgit v1.2.3-54-g00ecf