Design: webassembly如何处理结构?

创建于 2017-06-26  ·  8评论  ·  资料来源: WebAssembly/design

我尝试阅读 webassembly 文档,但只看到它提到类型仅支持 i32、i64、f32、f64

但是我找不到任何地方提到复合类型,例如 struct

它在 webassembly 中是不可能的吗? C 编译器如何解决大于 64 位的结构? 如何在堆栈中将 2 个浮点数和 2 个整数打包在一起?

最有用的评论

多个返回值肯定仍在关注中,我打算
很快就写出一个提案。 也就是说,他们不给你结构
直接,您仍然需要将它们拆分为单独的值
除了函数调用之外的所有其他内容。

所有8条评论

937 本来可以为此提供一个简单的解决方案,但目前已关闭,我不确定 WebAssembly 团队中是否有人仍在考虑它。

对于最多 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。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

beriberikix picture beriberikix  ·  7评论

konsoletyper picture konsoletyper  ·  6评论

thysultan picture thysultan  ·  4评论

cretz picture cretz  ·  5评论

bobOnGitHub picture bobOnGitHub  ·  6评论