欢迎!请参阅关于页面以了解更多有关此信息。
目前比较两个不同的seqs需要迭代两个seqs,逐个比较值,忽略seq a 和 b 具有相同的(指针等价)rest的可能性。
a
b
提出的补丁在seq尾部添加了一个指针等价检查,这可以使等价短路,如果测试返回true,这对于比较具有共享子seq的大(或可能无限)的seq非常有用。
在此补丁之后,比较如下 (let [x (range)] (= x (cons 0 (rest x))))现在返回true,而不是当前不终止。
(let [x (range)] (= x (cons 0 (rest x))))
补丁: CLJ-1679-v3.patch
评论由:michaelblume
当这个测试失败时(它在我的master上失败,但我还有一些其他的发展补丁,我仍在找出冲突在哪里),它会无限期地等待。也许检查未来的等价会更好,并且超时这个未来?
如此 =)
评论由:bronsa
有道理,感谢更新后的补丁
嗯,前一个补丁存在一个问题,报告逻辑仍然试图强制序列和内存溢出,这个补丁阻止了这个行为。
好的,看起来 CLJ-1515、CLJ-1603 和这个补丁组合在一起会同时失败,尽管它们中的任意两个都能正常工作。
(实际上这个补丁的来源没问题,它依然很好地优化了结构共享的情况,只是其他两个补丁破坏了结构共享导致的范围问题,所以测试失败了)
明白了,如果我们应用这些票证上的补丁,看来我们得修改测试了。