在测试一些Specter用例时,发现这是一个热点。
对`constantly`的常见用法的审查表明,arity 1的情况是`constantly`在野外的最常见用途,因此只展开为两个参数。
性能测试
(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-改善constantly的性能.patch
*审阅者:* Alex Miller