如何知道在Clojure中放置类型提示以提高数值性能?

Ana*_*Ana 5 performance clojure

关于类型提示Clojure文档中,它有关于类型提示和强制如何使代码运行得更快的以下示例:

(defn foo [n]
  (loop [i 0]
    (if (< i n)
      (recur (inc i))
      i)))

(time (foo 100000))
"Elapsed time: 0.391 msecs"
100000

(defn foo2 [n]
  (let [n (int n)]
    (loop [i (int 0)]
      (if (< i n)
        (recur (inc i))
        i))))

(time (foo2 100000))
"Elapsed time: 0.084 msecs"
100000
Run Code Online (Sandbox Code Playgroud)

如果您运行此代码(set! *warn-on-reflection* true),它不会显示反射警告.是否需要程序员试错才能看出这些装饰品在哪些方面有所不同?或者是否有工具指示有问题的区域?

Ast*_*gat 2

好吧,只需考虑代码的哪些部分经常受到攻击,您就可以很好地估计这一点。

或者您可以使用某种普通的分析器。我推荐VIsual VM,您可以使用 clojure 来使用它。然后,您只需将它们放在您认为花费大部分时间的方法中(它还会显示对 java.lang.reflect.Method 的调用,如果它被频繁调用,您应该考虑使用类型提示)。