We're updating the issue view to help you get more done. 

SoftCaches update in-place, other cache types don't

Description

I've successfully used SoftCaches in my project, and now I had the need for another simple cache, so I've created a BasicCache. Thereby, I fell into the trap that while SoftCaches update in-place, BasicCaches don't (and looking at the code, all other cache types except for aforementioned SoftCache don't, too).

1 2 3 4 5 6 7 8 9 10 11 12 user> (def C (cache/soft-cache-factory {})) #'user/C user> (cache/miss C :a 1) {:a #<SoftReference java.lang.ref.SoftReference@2bf31c53>} user> C {:a #<SoftReference java.lang.ref.SoftReference@2bf31c53>} ;; updated in-place user> (def C (cache/basic-cache-factory {})) #'user/C user> (cache/miss C :a 1) {:a 1} user> C ;; nope, no update, still initial value {}

So with every cache type except for SoftCaches, you have to use the return value of `miss` (and `evict`). But the documentation doesn't mention that at all. The typical has?/miss/hit snippets explaining the usage pattern also discard the value of `miss`.

IMHO, a cache is something mutable and should of course update in place. I mean, when you `(def C (some-cache...))`, are you really supposed to use `alter-var-root` or make the cache Var dynamic and use `set!`?

Environment

None

Status

Assignee

Sean Corfield

Reporter

Tassilo Horn

Labels

None

Approval

None

Patch

None

Priority

Critical