分享您的想法参予2024年Clojure问卷调查!

欢迎!请参阅关于页面了解有关这部分的信息。

0 votes
Collections

现在比较两个不同的序列需要遍历这两个序列并进行逐项比较,忽略序列 ab 可能具有相同的(指针相等的)其余部分的可能性。

提出的补丁在序列尾部添加了指针相等性检查,如果测试返回 true,则可以截断相等性检查,这在比较大(或可能无限)的共享公共子序列的序列时很有用。

在此补丁之后,以下比较:
(let [x (range)] (= x (cons 0 (rest x))))
目前在 Clojure 中无法终止,在常量时间内返回 true。

补丁: CLJ-1679-v3.patch

8 答案

0 votes

由:michaelblume

当这个测试失败时(在我的master上失败,但我有其他许多开发补丁,我还在找出冲突在哪里),它会无限期地挂起。可能最好在未来检查相等性并超出时间限制?

0 votes

由:michaelblume

如下所示=)

0 votes

由:bronsa

有道理,感谢更新补丁

0 votes

由:michaelblume

嗯,前一个补丁有一个问题,报告逻辑仍然试图强制序列和OOM,这个补丁阻止了这种情况。

0 votes

由:michaelblume

好的,看起来 CLJ-1515、CLJ-1603 和这个补丁一起组合会同时失败,尽管其中任意两个单独使用都没有问题。

0 votes

由:michaelblume

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

0 votes

由:bronsa

我明白了,如果那些补丁被应用,我们可能需要修改测试。

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