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

欢迎!请参阅关于页面以了解有关此内容的更多信息。

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

对常量的常用情况进行了审查,发现在野外,arity 1情况是常量最常用的cases,所以只展开到两个参数。

性能测试


(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-Improve-performance-of-constantly.patch

*预审人员:* Alex Miller

5 答案

0

评论者:alexmiller

我想在我们的工作流程图中指出我们的工作流程https://dev.clojure.org/display/community/JIRA workflow。我已经评估了这一点,但除非经过预审,否则不大可能与下一次发布相关,而预审需要补丁。因此,如果你能的话,会很有帮助

  • 说明你使用此用例产生的差异(Specter)
  • 附加补丁
  • 在票据描述中包含基准测试

我有一个问题:要展开多少个参数?10好像有点多?我猜最多2或3个参数就可以覆盖90%以上的cases,但可以研究https://crossclj.info/fun/clojure.core/constantly.html或其他内容,以获得一些想法。

0

评论者:alexmiller

在 Specter 中你遇到的最大论元数量是多少?

0

评论者:alexmiller

我对 Specter 进行了一些调查,我怀疑 1 个论元的场合占 98%,而 0 个论元的场合占据了剩余的大部分。我并没有找到任何论元大于 1 的实例,尽管我相信外面肯定有一些。我认为将论元展开到 2 个论元就已经足够了。

0

评论者:nathanmarz

Specter 使用论元为 1 的 constantly,因此这个补丁就足够用于 Specter。

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