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

欢迎!请查阅关于页面,了解更多关于这个网站如何运作的信息。

0投票
Clojure

你好!

这个简单的代码片段展示了这个问题

(doseq [outer-seq (list (range)) inner-seq outer-seq])

这样就结束了。这不仅消耗了我的处理器,还消耗了所有可用的内存。实际上,它可能影响(实际上已经影响了)在消耗像大型XML文档这样的复杂懒序列结构。

我认为这至少是非平凡的行为。

可以通过这个小补丁来修复这个问题。我们可以获取当前迭代之前的下一个元素,而不是之后的,这样外部循环就不会保留对内部序列头部的引用。

这个补丁并不能解决所有问题,例如这个代码

(doseq [outer-seq [(range)] inner-seq outer-seq])

会泄漏。因为按块序列(在这个例子中是向量)会根据设计保留当前元素。

2 答案

0投票

评论由:jafingerhut

Andrew,很抱歉,我不知道这个票据是否对Clojure核心团队感兴趣。

我知道的是,如果提交者签订了贡献协议(CA),补丁才会被考虑加入Clojure。如果您有兴趣这样做,可以在这里在线快速完成:https://clojure.org/contributing

0投票
参考:https://clojure.atlassian.net/browse/CLJ-1595(由alex+import报告)
...