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

欢迎!请参阅 关于 页面以获取更多关于如何使用本站的信息。

0
Collections

目前比较两个非相同序列需要遍历两个序列逐个比较值,忽略序列 ab 可能有相同的(指针相等的)剩余部分的可能性。

提议的补丁在序列尾部添加了一个指针相等检查,如果返回测试结果为真,可以短路等性检查,这在比较共享公共子序列的较大(或者可能是无限)序列时非常有用。

此补丁后,类似以下比较
(let [x (range)] (= x (cons 0 (rest x))))
目前不会终止,将立即返回 true。

补丁: CLJ-1679-v3.patch

8 答案

0

评论由:michaelblume 提出

当这个测试失败时(它在我的 master 上失败,但我还有一大堆其他开发补丁,我仍在试图找出冲突点),它会永远挂起。也许最好是检查未来的等性并超时未来会更好?

0

评论由:michaelblume 提出

就是这样 =)

0

评论由:bronsa 提出

很有道理,感谢更新补丁

0

评论由:michaelblume 提出

嗯,之前的补丁有一个问题,报告逻辑仍然尝试强制执行序列和 OOMs,这个补丁阻止了这种情况。

0

评论由:michaelblume 提出

好吧,看起来 CLJ-1515、CLJ-1603 和这个补丁一起组合会导致失败,尽管其中任意两个都可以正常工作。

0

评论由:michaelblume 提出

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

0

评论由:bronsa 提出

明白了,我想如果我们应用这些票证的补丁,我们可能需要更改测试。

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