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

嗯,前面的补丁存在问题,报告逻辑仍然尝试强制序列化和 OOMs,这个补丁阻止了这种情况。

0

评论由:michaelblume

好的,看起来CLJ-1515、CLJ-1603和这个补丁一起都失败了,尽管任意两个都可以正常工作。

0

评论由:michaelblume

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

0

评论由:bronsa

我明白了,我想如果那些补丁被应用到的话,我们可能不得不更改测试。

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