WebAssembly return 能做什么?
What can WebAssembly return?
据我了解,WebAssembly 实例可以通过三种方式将 return 值传递给外部调用者:
return直接将值作为方法调用的结果(这只是基本数据类型 {i32、i64、f32、f64} 的单个值吗?)
调用带参数的导入函数,此函数可以存储参数或在调用时访问内存并将内容保存在其他地方
写入内存,执行后让外部环境访问
还有吗?详情是什么?
您的列表几乎完整 - 我能想到的唯一其他机制是全局变量。这些也可以导出以允许主机环境访问,因此可以想象用作 returning 结果的机制。
是的,您的说法是正确的,您只能return导出函数中的单个数值
您的评估大致正确。函数可以直接 return WebAssembly 值(i32、i64、f32、f64)或通过修改全局环境中的元素(如内存、Table 和 Globals)间接 return 数据。如果您正在与 WebAssembly 模块外部的调用者谈论 returns 数据,那么任何此类元素本身都需要从模块中导出。也就是说,你不能使用 WebAssembly 内存来间接 return 数据,除非他的内存本身也是导出的。
通过多值提案,您还可以直接 return 多个值:https://github.com/WebAssembly/multi-value。同样,GC 提案将允许您直接 return 复杂结构。但这些都不是今天可用的。
据我了解,WebAssembly 实例可以通过三种方式将 return 值传递给外部调用者:
return直接将值作为方法调用的结果(这只是基本数据类型 {i32、i64、f32、f64} 的单个值吗?)
调用带参数的导入函数,此函数可以存储参数或在调用时访问内存并将内容保存在其他地方
写入内存,执行后让外部环境访问
还有吗?详情是什么?
您的列表几乎完整 - 我能想到的唯一其他机制是全局变量。这些也可以导出以允许主机环境访问,因此可以想象用作 returning 结果的机制。
是的,您的说法是正确的,您只能return导出函数中的单个数值
您的评估大致正确。函数可以直接 return WebAssembly 值(i32、i64、f32、f64)或通过修改全局环境中的元素(如内存、Table 和 Globals)间接 return 数据。如果您正在与 WebAssembly 模块外部的调用者谈论 returns 数据,那么任何此类元素本身都需要从模块中导出。也就是说,你不能使用 WebAssembly 内存来间接 return 数据,除非他的内存本身也是导出的。
通过多值提案,您还可以直接 return 多个值:https://github.com/WebAssembly/multi-value。同样,GC 提案将允许您直接 return 复杂结构。但这些都不是今天可用的。