【问题标题】:Does using closures in sml affect the speed of running code in the interactive compiler?在 sml 中使用闭包会影响交互式编译器中运行代码的速度吗?
【发布时间】:2013-11-27 16:20:34
【问题描述】:

如果我有一个程序说:

fun foo x =
    let
       fun bar y = y * y
    in
       x + (bar x)
    end

    foo 123;

当我在 SML/NJ 中运行这个程序而不编译时,它是否必须处理 bar 每个的声明 时间foo 被调用?就像在解释语言中一样。

它会比运行慢吗

fun bar y = y * y
fun foo x = x + (bar x)
foo 123;

由于每次调用函数时值绑定都会更新,所以我想到了这个问题。
或者 SML 会在后台以某种巧妙的方式解决这个问题?

【问题讨论】:

    标签: closures sml smlnj


    【解决方案1】:

    交互模式下的 SML/NJ 仍会将您的函数编译为本机代码。当您声明foo 时,您的中间变量可能已经被优化掉了。也就是说,它可能会编译成类似val foo = fn x => x + (x * x) 的东西,并且没有第二个函数的开销,如果有的话,它应该会更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      相关资源
      最近更新 更多