4

現在、Webassemblyは少数のパラメータ タイプ、つまり固定サイズの整数と浮動小数点数のみをサポートしています。これは、数値を受け入れて返す C/Rust モジュールからのみ関数を定義してエクスポートできることを意味します。

ただし、Mozilla Developer Network によると、ホストの Javascript からモジュールのメモリを操作できます。

JavaScript または WebAssembly コードで作成された [M]emory は、JavaScript と WebAssembly の両方からアクセスおよび変更可能になります。

これは非常に有望に思えます。これは、メモリの一部を、言語の壁を越えてより複雑なデータをやり取りするためのバイト バッファーとして指定できることを示しています。モジュール内の関数は、ポインター (それ自体i32は固定サイズの整数) を受け入れて返すことができるため、現在の制約内で機能します。

残念ながら、このメモリをどのように管理すればよいかは明確ではありません。JS から Wasm プロセスにデータを渡す必要がある場合、Memory オブジェクトに直接書き込む必要がありますが、Memory のどの領域が空いているかわかりません。

最も安全な戦略は何ですか?Wasm への呼び出しの前に JS がメモリを要求する方法を提供する -and- -style 関数mallocのペアをエクスポートする必要がありますか? freeそれとも、確立されたベストプラクティスはありますか?

4

1 に答える 1