December 29, 2007
Blaine shared a cool way to make SLIME load much faster by taking advantage of the fact that Lisp uses images like Smalltalk (or more accurately, Smalltalk uses images like Lisp). He posted it for the group to see, but I wanted to post it here for my readers.
SBCL allows you to specify an image, or as they call it a core, by passing the
--core option along with (as far as I can tell) an absolute path to the core file (well, at least it doesn’t know that
$HOME). It, of course, also provides a way to create these core files, so you can load a bunch of stuff in, and then save a core file that has all of that already loaded.
So first, go into your SLIME directory and copy
swank- loader-original.lisp. Then make
swank-loader.lisp look like this (changing
slime-dir to be wherever your SLIME is, of course):
(if (not (find-package 'swank-loader)) ;; Edit SLIME-DIR to be where you have SLIME installed. (let ((slime-dir (merge-pathnames ".elisp/slime/" (user-homedir-pathname)))) (load (merge-pathnames "swank-loader-original" slime-dir))))
Then, make a file called
bootstrap.lisp with the following content:
;; Load Swank (load (merge-pathnames ".elisp/slime/swank-loader" (user-homedir-pathname))) ;; Save image (sb-ext:save-lisp-and-die "sbcl-with-slime.core")
And run this command:
$ sbcl --load bootstrap.lisp
sbcl-with-slime.core somewhere safe, I put mine in with my slime code to keep it all together. Then you just have to add the following to your
(let* ((slime-dir (concat elisp-dir "/slime")) (core-file (concat slime-dir "/sbcl-with-slime.core"))) (setq inferior-lisp-program (concat "sbcl --core " core-file)))
Then you can
M-x slime and it will be super fast.