2024 年 Clojure 状态调查! 分享您的想法。

欢迎!请参阅 关于 页面以了解更多有关本网站运作的信息。

0
Clojure

当前参数装箱由于以下两个原因,在 clojure.lang.Reflector 中的效率不高:
1. 当参数类型为非原始类型时,做出不必要调用 Class.cast(..) 。
2. 在装箱参数时,分配了不必要的额外 Object(link: ) 数组。

此补丁修复了这些问题,而不会改变其他行为。所有测试都通过。

7 个回答

0

评论者:alexmiller

示例代码中存在此问题?

性能基准测试:前后?

0

评论者:mikera

嗨 alex,我正在尝试改进反射的快速路径,这将是一系列更改,包括 clj-1784 及我的一些其他想法。

我认为就每个更改进行广泛的辩论/基准测试并不是很有成效。为了全面评估影响,或许我们最好为所有更改创建一个新的工单,包括基准测试?

愿意这么做,但如果您能表明这些建议将得到接受,前提是整体上有所改进,那将非常有帮助。如果你们对在这个空间里的性能改进不感兴趣,我不想在 Clojure 开发上浪费力气。而我也没有时间和精力对每个个体的改动进行深入讨论。

0

评论者:alexmiller

每张工单应指明一个具体问题,并提出有证据支持的解决方案。如果存在多个问题,它们可能以不同的速度移动。

如果您识别出一个热点,那么我们很乐意查看它。但我们必须从一个要解决的问题开始,而不是仅仅:“这里有 一些改动”。如果这些改动使事情变得更好,那么您应该能够证明这一点。

0

评论者:alexmiller

我想说,我仍然怀疑对反射问题正确的答案不仅仅是移除反射。但我不能在没有您提供问题的情况下评估这一点。

0

评论者:mikera

问题在于它效率低(因此反射用户速度慢),正如描述中所说明的。如果您有想看到的不同措辞的替代方法,可以建议吗?

人们是否应该使用反射与使反射本身更快是正交的。我同意当可能时人们应该使用类型提示,但是许多人没有时间找出它/不知道如何正确操作/没有意识到这种情况,因此任何针对这些情况的提高都应该受到欢迎?

此外,您还没有回答我的问题:您想要一个包含所有反射性能改进工单的单个工作项,还是不想要?

0

评论者:alexmiller

这个工单的标题是“优化反射过程中的参数装箱”。这是一个解决方案,而不是一个问题。我在寻找的是像“带有装箱参数的反射慢”这样的标题,以及一个以一些示例代码开头的描述,这些示例代码演示了问题。(这些示例代码通常是最好的测试模板,应该包含在修补程序中。)

我接下来寻找的证据表明您所建议的更改可改善该问题。对于性能问题,我特别寻找的是基准测试结果,最好是使用criterium等测试工具,这让我相信所得的收益是真实的。

从优先级的角度来看,我不认为反射性能是一个高优先级的问题,因为最好的答案可能是:不要使用反射。话虽如此,我愿意考虑它,特别是如果有令人信服的例子表明难以移除反射或在哪个情况下反射的发生是不太明显的。

关于您的最后一个问题,我们更喜欢考虑个别问题,而不是“一大堆变化”,因此分别做会更好。

0
参考: https://clojure.atlassian.net/browse/CLJ-1866(由 mikera 报告)
...