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
参考资料:[https://clojure.atlassian.net/browse/CLJ-1866](https://clojure.atlassian.net/browse/CLJ-1866)(由mikera报告)
欢迎使用Clojure问答社区,在这里您可以提出问题,并从Clojure社区成员那里获得回答。
...