現在、Webassemblyは少数のパラメータ タイプ、つまり固定サイズの整数と浮動小数点数のみをサポートしています。これは、数値を受け入れて返す C/Rust モジュールからのみ関数を定義してエクスポートできることを意味します。
ただし、Mozilla Developer Network によると、ホストの Javascript からモジュールのメモリを操作できます。
JavaScript または WebAssembly コードで作成された [M]emory は、JavaScript と WebAssembly の両方からアクセスおよび変更可能になります。
これは非常に有望に思えます。これは、メモリの一部を、言語の壁を越えてより複雑なデータをやり取りするためのバイト バッファーとして指定できることを示しています。モジュール内の関数は、ポインター (それ自体i32
は固定サイズの整数) を受け入れて返すことができるため、現在の制約内で機能します。
残念ながら、このメモリをどのように管理すればよいかは明確ではありません。JS から Wasm プロセスにデータを渡す必要がある場合、Memory オブジェクトに直接書き込む必要がありますが、Memory のどの領域が空いているかわかりません。
最も安全な戦略は何ですか?Wasm への呼び出しの前に JS がメモリを要求する方法を提供する -and- -style 関数malloc
のペアをエクスポートする必要がありますか? free
それとも、確立されたベストプラクティスはありますか?