请在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日,实现了汤姆建议的性能增强,尽管方式与他的建议不完全一样。它确实计算了两个键序列的并集。

0

评论者:jafingerhut

我认为,这里的问题可能不在于性能,而在于Clojure依赖于自己未记录的行为,即clojure.set/union可以对某些非集合的参数工作。

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