请在2024 Clojure状态调查中分享您的想法!

欢迎!请查阅关于页面了解有关此功能的更多信息。

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

对常量函数常见用法的审查表明,状态1是最常见的`constantly`使用情况,因此只展开了两个参数。

性能测试


(使用'criterium.core)
(定义f(常量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    (~5x 改善)
;; 2     3.508726 µs    620.415032 ns    (~5x 改善)


*修复:* 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 提报)
...