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

欢迎!请参阅关于页面以获取更多关于此功能的信息。

+2
Clojure

关键字的intern(符号)方法使用递归调用来获取一个有效的关键字实例。我认为它可以改写为一个'for循环'来减少方法调用的开销。
以减少方法调用成本。
因此,我开发了此补丁并做了一些简单的基准测试。在运行'ant jar'之后,请在命令行中运行以下命令三次:

java -Xms64m -Xmx64m -cp test:clojure.jar clojure.main -e "(time (dotimes (link: n 10000000) (keyword (str n))))"

在打补丁之前

"执行时间:27343.827毫秒"
"执行时间:26172.653毫秒"
"执行时间:25673.764毫秒"

打补丁之后

"执行时间:24884.142毫秒"
"执行时间:23933.423毫秒"
"执行时间:25382.783毫秒"

看起来补丁让关键字内部处理更快了一些。

补丁附于此处并进行测试。

谢谢。

附言。我已经签署了捐助者协议,我的邮箱是[email protected]

9 个答案

0

由 alexmiller 发表的评论

看起来很有趣(依我所见,这将是个好的变化)。我将其用于其中使用了关键字变化的JSON解析基准测试,看到了大约3%的性能提升。

0

由 killme2008 发表的评论

已更新补丁,移除了for循环中的'k == null'语句,这在for循环中是不必要的。

0

由 jafingerhut 发表的评论

戴尼斯,虽然JIRA可以处理具有相同名称的多个补丁,但对于讨论补丁的人来说可能会感到困惑,而且对于我必须评估的某些脚本来说也是如此。请您考虑给补丁不同的名称(例如包含版本号),或者如果它们已过时,请删除旧的补丁。

0

由 killme2008 发表的评论

你好,andy

感谢你的提醒。我已删除了旧补丁。

0

由 killme2008 发表的评论

很高兴看到它很有帮助。我用现在的master分支对补丁进行了基准测试,效果也很好。

0

由 killme2008 发表的评论

这个补丁能否合并?还是被拒绝了?

0

由 alexmiller 发表的评论

由于这是一个小改进,因此这个补丁的优先级还不够高,尚未考虑。

0

由 killme2008 发表的评论

好的。希望合并它。谢谢。

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