在测试某些Specter用例时,发现这是一个热点。
对常量的常用情况进行了审查,发现在野外,arity 1情况是常量最常用的cases,所以只展开到两个参数。
性能测试
(use 'criterium.core)
(def f (constantly 1))
(bench (dotimes [_ 1000] (f)))
(bench (dotimes [_ 1000] (f 1)))
(bench (dotimes [_ 1000] (f 1 2)))
;; 结果
;; 参数数 之前 之后
;; 0 611.455589 ns 607.800747 ns (预期无变化)
;; 1 3.098828 µs 611.116510 ns (~5倍改进)
;; 2 3.508726 µs 620.415032 ns (~5倍改进)
*补丁:* 0001-CLJ-2228-Improve-performance-of-constantly.patch
*预审人员:* Alex Miller