

Memoization in Clojure - st3fan
http://stefan.arentz.ca/2009/11/02/memoization-in-clojure/

======
spuz
Of course the next step is to write an implementation of memoize that stores
the entries in its maps using SoftReferences
([http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftRefe...](http://java.sun.com/javase/6/docs/api/java/lang/ref/SoftReference.html)).
This way, anything stored in the cache will always be garbage collected before
the JVM throws an OutOfMemoryError. I'm surprised that SoftReferences are not
part of the default implementation given Clojure's nice Java interop as they
would be perfect for a function like memoize.

~~~
mikedouglas
Sent a patch to Rich, so we'll hopefully see it in the official
implementation.

~~~
spuz
Awesome, you don't happen to have published the patch to github or Assembla
have you? I have a suspicion that Rich will not replace the existing memoize
with a SoftReference version as it is quite specific of the underlying
architecture to provide this functionality. Rich is currently focused very
much on CINC (Clojure in Clojure) and probably wants to avoid exposing
implementation details to increase portability to other platforms (such as
.NET). All the same, it would be great to have a SoftReference memoize in the
contrib library for example.

~~~
mikedouglas
Forgot about that. Looks like soft references are tied to the JVM as well
(IKVM emulates them by waiting until a full run to collect).

[http://github.com/fanatico/clojure/commit/aa78d57476806df10f...](http://github.com/fanatico/clojure/commit/aa78d57476806df10f2f1aa41181b65cae943127)

