据我了解,WebAssembly 实例可以通过三种方式将值返回给外部调用者:
直接返回一个值作为方法调用的结果(这只是基本数据类型 {i32, i64, f32, f64} 的单个值吗?)
使用参数调用导入函数,该函数可以在调用时存储参数或访问内存,并将内容保存在其他地方
写入内存并在执行后让外部环境访问它
还有更多吗?详情为何?
最佳答案
您的评估大致正确。函数可以直接返回 WebAssembly 值(i32、i64、f32、f64),也可以通过修改全局环境中的元素(例如 Memory、Table 和 Globals)间接返回数据。如果您正在谈论将数据返回给 WebAssembly 模块外部的调用者,则任何此类元素本身都需要从模块中导出。也就是说,你不能使用 WebAssembly 内存来间接返回数据,除非内存本身也被导出。
通过多值提案,您还可以直接返回多个值:https://github.com/WebAssembly/multi-value 。同样,GC 提案将允许您直接返回复杂的结构。但目前这两个都不可用。
关于io - WebAssembly 可以返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65429036/