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).

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

Activity

Show:
Sean Corfield
March 2, 2018, 7:35 AM

Release 0.7.0

Sean Corfield
March 1, 2018, 5:39 AM

Whilst I agree that SoftCache is an anomaly, I'd note that TTLCache is immutable (maybe it was mutable back in 2014?) and that SoftCache, by its very nature, is built on top of mutable Java data structures – so it's always going to be the odd one out. I consider this to be a documentation issue – happy to see issues opened suggesting improvements to the README or the docs tree (or patches!).

Alex Miller
March 22, 2016, 4:33 PM

Seems like renaming defcache breaks any external users of defcache?

A quick search of github https://github.com/search?l=clojure&q=defcache&type=Code&utf8=%E2%9C%93 shows many examples.

Ambrose Bonnaire-Sergeant
August 4, 2014, 7:52 PM

Patch distinguishes between mutable and immutable caches, and classifies SoftCache and TTLCache as mutable.

Declined

Assignee

Sean Corfield

Reporter

Tassilo Horn

Labels

None

Approval

None

Patch

None

Priority

Critical