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

欢迎!请在 关于 页面上查看更多关于该功能的工作原理的信息。

+2
Clojure

关键字的内联(Symbol)方法使用递归调用来获取一个有效的关键字实例。我认为它可以改写为一个 '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' 条件,它是不必要的。

0

评论者:jafingerhut

Dennis,虽然JIRA可以处理同名多个补丁,但对于讨论补丁的人来说可能会造成混淆,对于我需要评估的一些脚本来说也是如此。请考虑给补丁不同的名称(例如包含版本号),或者在它们过时后删除。

0

评论者:killme2008

嗨,andy

感谢您提醒我,我已经删除了旧补丁。

0

评论者:killme2008

我很高兴看到它是有帮助的。我对补丁与当前主分支进行了基准测试,效果也很好。

0

评论者:killme2008

这个补丁可以合并吗?或者已被拒绝?

0

评论者:alexmiller

作为一个小的增强,这个补丁尚未达到足够高的优先级被考虑。

0

评论者:killme2008

好吧。希望可以合并它。谢谢。

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