WebAssembly return 能做什么?

What can WebAssembly return?

据我了解,WebAssembly 实例可以通过三种方式将 return 值传递给外部调用者:

还有吗?详情是什么?

您的列表几乎完整 - 我能想到的唯一其他机制是全局变量。这些也可以导出以允许主机环境访问,因此可以想象用作 returning 结果的机制。

是的,您的说法是正确的,您只能return导出函数中的单个数值

您的评估大致正确。函数可以直接 return WebAssembly 值(i32、i64、f32、f64)或通过修改全局环境中的元素(如内存、Table 和 Globals)间接 return 数据。如果您正在与 WebAssembly 模块外部的调用者谈论 returns 数据,那么任何此类元素本身都需要从模块中导出。也就是说,你不能使用 WebAssembly 内存来间接 return 数据,除非他的内存本身也是导出的。

通过多值提案,您还可以直接 return 多个值:https://github.com/WebAssembly/multi-value。同样,GC 提案将允许您直接 return 复杂结构。但这些都不是今天可用的。