【问题标题】:What can WebAssembly return?WebAssembly 可以返回什么?
【发布时间】:2020-12-23 18:16:43
【问题描述】:

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

  • 作为方法调用的结果直接返回一个值(这只是基本数据类型 {i32, i64, f32, f64} 的单个值吗?)

  • 调用带参数的导入函数,该函数可以在调用时存储参数或访问内存并将内容保存在其他地方

  • 写入内存并在执行后让外部环境访问它

还有更多吗?详情是什么?

【问题讨论】:

    标签: io return return-value webassembly return-type


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-10
        • 1970-01-01
        • 1970-01-01
        • 2012-05-21
        • 1970-01-01
        • 2019-09-16
        • 2012-08-21
        • 1970-01-01
        相关资源
        最近更新 更多