Design: WebAssemblyは構造体をどのように処理しますか?

作成日 2017年06月26日  ·  8コメント  ·  ソース: WebAssembly/design

WebAssemblyドキュメントを読み込もうとしましたが、タイプがi32、i64、f32、f64のみをサポートしていると記載されているだけです。

しかし、構造体などの複合型について言及している場所は見つかりません。

WebAssemblyではネイティブに不可能ですか? 64ビットより大きい構造体に対するCコンパイラの回避策は? 2つのfloatと2つのintを一緒にスタックにパックするにはどうすればよいですか?

最も参考になるコメント

複数の戻り値は間違いなくまだレーダーに残っています、そして私は
すぐに提案を書いてください。 そうは言っても、彼らはあなたに構造体を与えません
直接、あなたはまだそれらを個々の値に分割する必要があります
関数呼び出し以外のすべて。

全てのコメント8件

937はこれに対する簡単な解決策を提供していたでしょうが、現在は閉鎖されており、WebAssemblyチームの誰かがまだそれについて考えているかどうかはわかりません。

最大8バイトのコンポジションの場合、64ビット整数にパックできます。

より大きな構造の場合は、線形メモリまたは一連の可変グローバルを介してそれらを転送する必要があります。

複数の戻り値は間違いなくまだレーダーに残っています、そして私は
すぐに提案を書いてください。 そうは言っても、彼らはあなたに構造体を与えません
直接、あなたはまだそれらを個々の値に分割する必要があります
関数呼び出し以外のすべて。

@ rossberg-chromiumありがとうございます。 これらの戻り値のサイズと順序が制限されない場合は、コンパイルされた言語による偽の構造体を回避できると思います。 それで十分なはずです

それまでの間、構造体はポインタを使用して実装できますよね?

構造体を線形メモリに割り当てて、ポインタを操作するだけです。

@nidinありがとうございます。 それは、wasmにコンパイルされたC構造体の方法でしたか?

@rossberg構造サポートに関する更新はありますか?

@krisnye 、線形メモリを使用するwasmプログラムの「構造体」サポートの計画はありません。 コンパイラは、構造体および構造体演算をプリミティブ演算に下げることになっています。 線形メモリを使用せずに、GCサポート提案のコンテキストで構造体タイプの計画がいくつかあります。たとえば、 //github.com/WebAssembly/gcを参照して。https://github.com/lars-t-hansen/moz-gc-experimentsを参照して

このページは役に立ちましたか?
0 / 5 - 0 評価