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
).
在更复杂的示例中,将有 block
和 br_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 编译为可执行代码的一部分,并且在中间添加函数仅意味着现在引擎必须在编译阶段(对新函数进行编码)以及执行期间做更多的工作(实际调用它们并取回结果)。
如果 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
).
在更复杂的示例中,将有 block
和 br_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 编译为可执行代码的一部分,并且在中间添加函数仅意味着现在引擎必须在编译阶段(对新函数进行编码)以及执行期间做更多的工作(实际调用它们并取回结果)。