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

欢迎!请参阅关于页面,了解更多关于如何使用本页面的信息。

0
Clojure

目前参数封装在clojure.lang.Reflector中效率低下,原因如下:
1. 当参数类型非原生时,会不必要地调用Class.cast(..)
2. 在封装参数时会分配一个不必要的额外Object数组

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

7 个答案

0

评论者:alexmiller

有什么示例代码说明了这个问题吗?

基准测试在/之后?

0

评论者:mikera

嗨,alexmiller,我正在尝试改进反射的快速路径,这将是很多更改的一部分,包括clj-1784和几个其他想法。

我认为就每个单一更改进行广泛的辩论/基准测试并不是很有成效。把所有更改都放在一起,并一起进行基准测试,看看整体影响是不是更好?

我很乐意这样做,但如果你对此类 Clojure 开发不感兴趣,这会很有帮助,因为性能上的改进。我也不想在这方面浪费时间。我没有时间逐个对每个更改进行广泛的辩论。

0

评论者:alexmiller

每张票据都应确定一个具体的问题,并提出有证据支持的解决方案。如果有多个问题,它们可能以不同的速率移动。

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

0

评论者:alexmiller

我认为,关于反射问题的正确答案不仅仅是移除反射,我还不能在没有问题的情况下评价这一点。

0

评论者:mikera

正如描述中所述,由于效率低下(因此对使用反射的用户来说很慢),问题是如果有一个您希望看到不同措辞的替代方法,请提出。

是否应使用反射与使反射本身更快是正交的。我同意只要可能人们应该使用类型提示,但有很多人没有时间弄清楚它/不知道如何正确操作/没有意识到它正在发生,所以对于这些情况的所有改进都应该是受欢迎的?

此外,您还没有回答我的问题:您是否希望所有内容都汇总为单个反射性能改进票据?

0

评论者:alexmiller

这个票据的标题是“优化反射过程中的参数装箱”。这是一个解决方案,而不是问题。我想找到一个类似“带有装箱参数的反射很慢”的标题,以及一个以一些示例代码开始的描述,以展示问题。(这些示例代码通常也是测试的一个很好的模板,并且应包括在补丁中。)

接下来,需要证据表明您提出的更改改善了问题。对于性能问题,我具体需要前后基准测试,更理想的是使用criterium等测试工具,让我有信心这些收益是真实的。

从优先级的角度来看,我认为反射性能不是一个高优先级的问题,因为最好的答案可能是:不要使用反射。但是,我愿意考虑,特别是如果有一个有说服力的例子显示可能难以删除反射,或者反射发生的情况非常不明显。

关于您的最后一个问题,我们更喜欢考虑个别问题,而不是“一大堆更改”,所以分开会更好。

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