在测试一些 Specter 用例时,这被发现在性能瓶颈中。
对 `constantly` 常用情况的回顾表明, arity 1 情况是野外的 `constantly` 最常见的用法,因此只对两个参数进行了展开。
性能测试
(使用 'criterium.core)
(定义 f (constantly 1))
(bench (dotimes [_ 1000] (f)))
(bench (dotimes [_ 1000] (f 1)))
(bench (dotimes [_ 1000] (f 1 2)))
;; 结果
;; 参数数 展开前 展开后
;; 0 611.455589 纳秒 607.800747 纳秒 (预期没有变化)
;; 1 3.098828 微秒 611.116510 纳秒 (~5倍改进)
;; 2 3.508726 微秒 620.415032 纳秒 (~5倍改进)
*补丁:* 0001-CLJ-2228-Improve-performance-of-constantly.patch
*预审者:* Alex Miller