Inline Caches with LOAD-TIME-VALUE, part 2 #
random, February 21st 2011
So why would you want to use LOAD-TIME-VALUE to implement a cache instead of doing something like this:
(let (cache)
(defun parse-timestamp (string)
(let ((cached cache))
(if (equal string (car cached))
(cdr cached)
(let ((stamp (%parse-timestamp string)))
(setf cache (cons string stamp))
stamp)))))
...or this?
(defparameter *cache* nil)
(defun parse-timestamp (string)
(let ((cached *cache*))
(if (equal (car cached) string)
(cdr cached)
(let ((stamp (%parse-timestamp string)))
(setf *cache* (cons string stamp))
stamp))))
It's the reason why I'm talking about inline caches. While using toplevel closure or a global variable to implement the cache works fine, consider inlining (and compiler-macros.)
Simply by proclaiming the LOAD-TIME-VALUE-using function INLINE, you will be giving each call site their own cache