我尝试阅读 webassembly 文档,但只看到它提到类型仅支持 i32、i64、f32、f64
但是我找不到任何地方提到复合类型,例如 struct
它在 webassembly 中是不可能的吗? C 编译器如何解决大于 64 位的结构? 如何在堆栈中将 2 个浮点数和 2 个整数打包在一起?
对于最多 8 个字节的组合,您可以将它们打包为 64 位整数。
对于较大的结构,您需要通过线性内存或一组可变全局变量来传输它们。
多个返回值肯定仍在关注中,我打算
很快就写出一个提案。 也就是说,他们不给你结构
直接,您仍然需要将它们拆分为单独的值
除了函数调用之外的所有其他内容。
@rossberg-chromium 非常感谢。 我认为如果它不限制这些返回值的大小和顺序,那么我们可以通过编译语言使用假结构来解决。 那应该够了
同时,结构可以使用指针来实现,对吗?
只需在线性内存中分配您的结构并使用指针。
@nidin谢谢。 这是C struct编译成wasm的方式吗?
@rossberg关于结构支持的任何更新?
@krisnye ,没有计划为使用线性内存的 wasm 程序提供“结构”支持; 编译器应该将结构和结构操作降低为原始操作。 在 GC 支持提案的上下文中,有一些针对 struct 类型的计划,不使用线性内存,参见例如https://github.com/WebAssembly/gc。 在 Firefox Nightly 中至少有一个子集的高度实验性支持,请参阅https://github.com/lars-t-hansen/moz-gc-experiments。
最有用的评论
多个返回值肯定仍在关注中,我打算
很快就写出一个提案。 也就是说,他们不给你结构
直接,您仍然需要将它们拆分为单独的值
除了函数调用之外的所有其他内容。