请在2024 Clojure 调查问卷中发表您的看法!

欢迎!有关此功能的更多信息,请参阅关于页面。

0
Clojure
在测试一些 Specter 用例时,发现这是一个热点问题。

对 constantly 常用方法的综述显示,第 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 纳秒  607.800747 纳秒    (预期没有变化)
;; 1     3.098828 微秒    611.116510 纳秒    (~5 倍 Improvement)
;; 2     3.508726 微秒    620.415032 纳秒    (~5 倍 improvement)


*补丁:* 0001-CLJ-2228-Improve-performance-of-constantly.patch

*预审者:* Alex Miller

5 答案

0

由:alexmiller 发表评论

我想在这里强调我们的流程图 https://dev.clojure.org/display/community/JIRA workflow。我已经将它分类,但现在除非已经进行预审,否则它不太可能包含在下一个版本中,而这需要补丁。因此,如果您能

  • 说明您的用例(Specter),这将有所 віручение
  • 附加补丁
  • 包含基准测试的描述

我对一个问题有一个疑问,就是应该展开多少参数。10 好像太多了?我的猜测是,2 或 3 个参数足以涵盖 90% 的案例,但您可以在 https://crossclj.info/fun/clojure.core/constantly.html 或进行其他研究来获得一些想法。

0

由:alexmiller 发表评论

Specter 中你遇到的最高阶数是多少?

0

由:alexmiller 发表评论

我在周围做了一些检查,我怀疑1阶是98%的用例,其余的大部分是0阶。我没有找到任何阶数大于1的例子,尽管我确信外面有几个。我认为将阶数展开到2阶就足够了。

0

评论者:nathanmarz

Specter 使用1阶的 constantly,所以这个补丁对 Specter 已经足够。

0
参考: https://clojure.atlassian.net/browse/CLJ-2228 (由 alex+import 报告)
...