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

欢迎!请参阅关于页面以了解有关这方面的更多信息。

0
集合

目前比较两个不相同的序列需要遍历两个序列并逐值比较,忽略了序列 ab 可能具有相同的(指针相等)后续部分的可能。

提议的补丁在序列末尾添加了指针相等性检查,如果测试返回 true,则可以跳过相等性,这对于比较大型(或可能无限)共享公共子序列的序列非常有帮助。

在这个补丁之后,像以下这样的比较
(let [x (range)] (= x (cons 0 (rest x))))
目前在当前情况下不会终止,将会在常数时间内返回 true。

补丁: CLJ-1679-v3.patch

8 个答案

0

评论者:michaelblume

当此测试失败时(它在我的 master 上失败,但我还有一大堆其他开发补丁,我还在找出冲突在哪里),它会无限期地挂起。也许最好在未来检查相等性并使未来超时?

0

评论者:michaelblume

如此 =)

0

评论者:bronsa

有道理,感谢更新的补丁

0

评论者:michaelblume

嗯,之前的补丁有一个问题,报告逻辑仍然试图强制执行序列和OOM,这个补丁阻止了这个行为。

0

评论者:michaelblume

好的,看起来CLJ-1515、CLJ-1603和这个补丁都结合在一起导致一起失败,尽管任意两个都工作正常。

0

评论者:michaelblume

(事实上,这个补丁的源代码没有问题,它仍然很好地实现了短路,即在存在结构共享时,只是其他两个补丁破坏了范围的结构共享,所以测试失败了)

0

评论者:bronsa

明白了,如果应用了那些工单的补丁,我们将不得不更改测试。

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