2024年Clojure调查 中分享你的想法!

欢迎!请查看《关于》页面以获取更多关于此工作的信息。

0
Clojure
在测试一些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

5 个答案

0

评论者:alexmiller

我想提及我们的工作流图,请查看https://dev.clojure.org/display/community/JIRA workflow以了解此流程。我已经对此做了分级,但除非它已经被预筛选, otherwise it is unlikely to be reviewed for the next release unless it's been prescreened, and that requires a patch. 因此,如果你能

  • 提及你的使用案例(Specter)对性能的影响
  • 附加补丁
  • 在工单描述中包含基准测试结果

我有一个问题,即要展开多少个参数。10看起来很多?我的猜测是,2或3个参数可以涵盖90%以上的情况,但可以查看https://crossclj.info/fun/clojure.core/constantly.html或其他研究来获取一些启蒙思想。

0
by

评论者:alexmiller

Specter 中的常量最大可变参数数量是多少?

0
by

评论者:alexmiller

我在某些地方进行了一些调查,我怀疑可变参数数量为1的占到了98%,其余的大部分是可变参数数量为0的情况。虽然我确信有几种可变参数数量大于1的例子,但我没能找到任何实例。我认为将可变参数数量展开为2就已经足够了。

0
by

评论:nathanmarz

Specter 使用可变参数数量为1的常量,因此这个补丁对于 Specter 已经足够。

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