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

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

0
Clojure

你好!

这个小片段展示了这个问题

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

就是这样。这个操作不仅耗尽我的处理器,还耗尽所有可用的内存。在实践中,它可能影响(实际上正在影响)消耗复杂延迟结构,如巨大的XML文档。

我认为这是一个至少非常明显的行为。

可以通过这个小补丁来解决这个问题。我们在当前迭代之前获得下一个元素,而不是之后,这样外循环就不会持有inner-seq的头部引用。

这个补丁并没有解决所有问题,例如,以下代码

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

会泄漏。因为chunked-seqs(在这个例子中是向量)根据设计保留当前元素。

2 答案

0

评论由:jafingerhut

Andrew,很抱歉,我不知道这个工单是否对Clojure核心团队有参考价值。

我知道的是,只有当提交者签署了贡献者协议(CA)时,补丁才会被考虑加入Clojure。如果您对此感兴趣,可以方便在线签署这里:https://clojure.org/contributing

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