【问题标题】:Is declaring anonymous functions expensive in Clojure?在 Clojure 中声明匿名函数是否昂贵?
【发布时间】:2017-02-13 05:26:01
【问题描述】:

作为 Clojure 程序员,我们使用了很多匿名函数而不考虑它的成本。

在 clojure 中创建和使用匿名函数的相对成本是多少?

【问题讨论】:

  • 我稍微编辑了这个问题,以避免它因为基于意见而被关闭。我希望我没有改变你的意图。
  • 另一种选择是......保留对命名函数的引用?除非您在整个代码中复制粘贴相同的 lambda,否则我看不到这将是一个显着的改进。
  • 我会删除 clojurescript 标签。 ClojureScript 转译成 Javascript,js 中的匿名函数被广泛使用,浏览器对此进行了优化。接受的答案也是关于 Clojure 的。

标签: clojure functional-programming lisp clojurescript


【解决方案1】:

Clojure 以相同的方式编译所有匿名或命名函数。然后它将指向该函数的指针存储在命名空间中(包含在 var 中),以便其他人以后可以找到它。

编译并用作匿名函数的函数与编译后的函数之间的编译时间没有成本差异,然后将指向它们的指针存储在作为命名空间一部分的 var 中。

当在运行时使用匿名函数时,大多数时候(也许总是)它们是通过创建闭包(对象)来创建的,因此创建它们的成本是一些内存和一点时间。

如果您在时间紧迫的循环中调用 eval,当然您可以在 Clojure 中创建与使用任何其他语言相同的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-08
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多