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

欢迎!请参阅关于页面以了解该工作方式的更多信息。

0
core.cache

你好!我正在玩弄LIRSCache时遇到了我认为是一个bug的情况。

https://github.com/clojure/core.cache/blob/master/src/main/clojure/clojure/core/cache.clj#L371

在对多个唯一密钥进行大量缺失的情况下,堆栈S将无限制增长并违反您给出的限制。

(def C (cache/lirs-cache-factory {} :s-history-limit 2 :q-history-limit 1)) (defn populate [n] (let [pairs (map (fn [x] [x x]) (range n))] (reduce (fn [cache [k v]] (cache/miss cache k v)) C pairs))) (.toString (populate 10)) "{9 9, 1 1, 0 0}, {0 1, 1 2, 2 3, 3 4, 4 5, 5 6, 6 7, 7 8, 8 9, 9 10}, {9 10}, 10, 2, 1"

您可以看到S堆栈正在无限制增长,如果您进行(populate 1000),则它将有1000个条目大。

我不确定期望的结果是什么,但每次我们向其中一个队列添加内容时,我们需要确保我们正确处理被淘汰的东西,除非我误解了事情。

感谢使Clojure变得出色!

1 答案

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