WebAssembly 中的延迟评估

Lazy evaluation in WebAssembly

如果 const 值通过函数传递而不是就地创建它们,这会是一种惰性求值吗?

简单示例:

(module
    (func $let3.5 (result f64) f64.const 3.5)
    (func $let2.5 (result f64) f64.const 2.5)

    (func $addLazyNumbers (result f64)
        (call $let3.5)
        (call $let2.5)
        f64.add
    )

    (export "addLazyNumbers" (func $addLazyNumbers))
)

然后在JS中调用module.exports.addLazyNumbers()(returns 6).

在更复杂的示例中,将有 blockbr_if,并且不需要某些值。

或者这只是一个开销,因为编译后值 3.5 和 2.5 已经在内存中了?

Or is this just a overhead because the values 3.5 and 2.5 are already in memory after compilation?

这只是开销,是的。

引擎直接将 const 编译为可执行代码的一部分,并且在中间添加函数仅意味着现在引擎必须在编译阶段(对新函数进行编码)以及执行期间做更多的工作(实际调用它们并取回结果)。