WebAssembly.Global() コンストラクター
WebAssembly.Global()
コンストラクターは、グローバル変数のインスタンスを表す新しい Global
オブジェクトを表します。これは JavaScript からアクセス可能で、1 つ以上の WebAssembly.Module
インスタンスの間でインポート/エクスポート可能です。これにより、複数のモジュールを動的リンクすることができます。
構文
js
new WebAssembly.Global(descriptor, value)
引数
descriptor
-
オブジェクトで、 2 つのプロパティを持ちます。
-
value
: 文字列で、そのグローバル変数のデータ型を表します。 これは以下のいずれかです。i32
: 32 ビット整数。i64
: 64 ビット整数。(JavaScript では、これはBigInt
として表される)f32
: 32 ビット浮動小数点数。f64
: 64 ビット浮動小数点数。v128
: 128 ビットベクトル。externref
: ホスト参照。anyfunc
: 関数参照。
mutable
: 論理値で、そのグローバル変数が変更可能であるかどうかを表します。既定ではfalse
です。
-
value
-
変数が保持する値です。変数のデータ型に合う限り、どんな値でも取れます。 もしも何の値も渡されないと、
descriptor.value
の値がi32
、i64
、f32
、f64
のいずれかである場合は型付きの 0 が使用され、descriptor.value
がexternref
またはanyfunc
であれば、null
が使用されます(DefaultValue
アルゴリズムで定義されているとおりです)。
例
新しい Global インスタンスの生成
以下の例は、WebAssembly.Global()
コンストラクターを用いて生成された新しいグローバルインスタンスです。
これは変更可能 (mutable) な i32
型で、値は 0 です。
その後、グローバルの値は、まず Global.value
プロパティを使用して 42
に変更され、次に global.wasm
モジュールからエクスポートされた incGlobal()
関数を使用して 43 に変更されます(これは、与えられた値に 1 を追加してから新しい値を返します)。
js
const output = document.getElementById("output");
function assertEq(msg, got, expected) {
const result =
got === expected
? `SUCCESS! Got: ${got}<br>`
: `FAIL!<br>Got: ${got}<br>Expected: ${expected}<br>`;
output.innerHTML += `Testing ${msg}: ${result}`;
}
assertEq("WebAssembly.Global exists", typeof WebAssembly.Global, "function");
const global = new WebAssembly.Global({ value: "i32", mutable: true }, 0);
WebAssembly.instantiateStreaming(fetch("global.wasm"), { js: { global } }).then(
({ instance }) => {
assertEq(
"getting initial value from wasm",
instance.exports.getGlobal(),
0,
);
global.value = 42;
assertEq(
"getting JS-updated value from wasm",
instance.exports.getGlobal(),
42,
);
instance.exports.incGlobal();
assertEq("getting wasm-updated value from JS", global.value, 43);
},
);
メモ: この例は GitHub 上の実行例で確認できます。また、ソースコードも参照してください。
仕様書
Specification |
---|
WebAssembly JavaScript Interface # dom-global-global |
ブラウザーの互換性
BCD tables only load in the browser