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