1.0.6.3: thread and interrupt safe CLOS cache
commit562e48a2bd3467121e24214110e535c841fbb622
authorNikodemus Siivola <nikodemus@random-state.net>
Mon, 28 May 2007 18:52:26 +0000 (28 18:52 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Mon, 28 May 2007 18:52:26 +0000 (28 18:52 +0000)
treeddee69f1bae151eab06f3be07ac0a338459b9eb8
parent8fee0ba99cd1b1038072bd3fc8f5d5338d80d2de
1.0.6.3: thread and interrupt safe CLOS cache

 * New cache implementation. While the patch appears to modify
   src/pcl/cache.lisp, it is really a wholesale reimplementation.

   -- Use compare-and-swap to provide atomicity where necessary.

   -- Layouts are write-once, but cached values can be replaced
      atomically.

   -- Expanding the cache (or dropping invalidated and incomplete
      entries) copies the cache.

   -- Use ..EMPTY.. as a sentinel value to denote unused cache line
      slot.

   -- Cache index zero is no longer special.

   -- Maximum cache size is limited to avoid ridiculously huge caches.

   -- API changes in the cache code: MAKE-CACHE replaces GET-CACHE.
      PROBE-CACHE now returns a primary indicating a hit or a miss,
      and returns the probed value as the second return value.

 * Move remaining non-cache related code from cache.lisp.

 * Delete unused closure-based dispatch code (src/pcl/dlisp2.lisp). If
   we want to support a compilerless build at some future date this
   code can be always resurrected from the CVS -- or better yet, can
   be re-implemented.

 * Delete MAKE-FINAL-ONE-INDEX-ACCESSOR-DFUN, inlining it to the
   call-sites for easier understanding. (Yes, there is such a thing as
   too much abstraction.)
12 files changed:
NEWS
src/code/array.lisp
src/cold/warm.lisp
src/pcl/boot.lisp
src/pcl/cache.lisp
src/pcl/dfun.lisp
src/pcl/dlisp.lisp
src/pcl/dlisp2.lisp [deleted file]
src/pcl/methods.lisp
src/pcl/std-class.lisp
src/pcl/vector.lisp
version.lisp-expr