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

欢迎!请查看关于页面获取更多关于此如何工作的信息。

0
Clojure

{{clojure.data/diff}},在118行定义了

java.util.Map (diff-similar [a b] (diff-associative a b (set/union (keys a) (keys b))))

由于{{keys}}返回一个键序列,这看起来像是一个错误。{{clojure.set/union}}在非集合上的行为奇怪且不一致,在这种情况下,两个键序列被连接。根据初步的基准测试,这似乎在地图没有公共键时略微提高性能,而具有相同键的地图则显著降低性能。由于{{diff-associative}}中的合并reduce,结果仍然是正确的。

补丁很简单(只需对每个键序列调用set)。

3 个答案

0

评论者:jafingerhut

clj-1087-diff-perf-enhance-patch-v1.txt,日期为2012年10月15日,实现了Tom建议的性能增强,尽管并非完全按照他建议的方式。它确实计算了两个键序列的并集。

0

评论者:jafingerhut

我建议,可能比性能问题更大的问题是Clojure依赖于它自己的未记录行为,即clojure.set/union可以在某些非集合参数上工作。

0
参考:[https://clojure.atlassian.net/browse/CLJ-1087](https://clojure.atlassian.net/browse/CLJ-1087) (由tomoj报告)
...