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 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 报告)
...