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

欢迎!有关本网站的更多信息,请参阅关于页面。

0
Collections

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

此补丁在seq尾部添加了指针相等性检查,如果测试返回true,则可以使得相等性短路,这对于比较具有公共子序列的大型(或可能是无限)seq非常有用。

在此补丁之后,比较如下
(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 报告)
...