nullprogram.com/blog/2010/01/15/
Update August 2011: Things have changed again, which has always been
the problem with Slime, and the reason I originally wrote
this. Currently, I think the best way to install Slime is
with Quicklisp
using quicklisp-slime-helper
.
Common Lisp is possibly the most advanced programming language. Think
of pretty much any programming language feature and Common Lisp
probably has it. Since lisp is the programmable programming language,
when someone invents a new language feature it can probably be added
to Common Lisp without even touching the language core.
However, if you're interested in digging into Common Lisp to try it
out, you may find yourself quickly running into walls just getting
started. It's a lot different than other programming environments you
may be used to. The Common Lisp tutorials generally skip this step,
assuming the user has an environment, or leaving that setup for the
"vendor" to handle. So, here's a guide to setting up a great Common
Lisp environment with
Emacs and
SLIME. It should work with any Common Lisp implementation and any
operating system that can run Emacs (i.e. most of them). Even a much
less capable one like Windows.
First, you need to pick a Common Lisp implementation and install
it. Ideally, it should end up in your PATH. Like C, the language is
defined solely by its standardized specification, rather than some
canonical implementation. Steel Bank
Common Lisp (SBCL) is currently
the
highest
performing implementation, it's Free Software, and it runs on a
wide variety of platforms, so take a look at that one if you're not
sure.
Next, install Emacs. We're using Emacs not just because it's the best
text editor ever created. :-D
It's because that's what
SLIME is written for, and Emacs is a lisp-aware editor. Really, Emacs
is a lisp interpreter that happens to be geared towards
text-editing. It's accused of breaking the rules of unix by being a
single, monolithic program, but it's really a whole bunch of small
lisp programs. You can even have a lisp REPL in Emacs
(ielm
), similar to what we will have once we're done
here. It's plays very well with Common Lisp.
If you're unfamiliar with Emacs, you should stop here and familiarize
yourself with it a bit. Really, you could spend a decade learning
Emacs and still have more to learn. The tutorial should be good enough
for now. Fire up Emacs and run the tutorial by pressing
control+h
then t
. In Emacs notation,
that's C-h t
. C-h
is the help/documentation
prefix, which can be used to look up variables/symbols
(v
), functions (f
), key bindings
(k
), info manuals (i
), the current mode
(m
), and apropos (searching) (a
). In the
info manuals, you should be able to find the full Emacs manual, Elisp
reference, and Elisp tutorial, since they are generally installed
alongside Emacs these days. Nearly anything you might need to know can
be found inside the included documentation.
Next, install SLIME. I'll be a bit more specific for this one. Make
a .emacs.d
directory in your home directory (whatever
your HOME environmental variable is set to). This is a common place to
put user-installed Emacs extensions. You will be putting
your slime
directory in here. There are two basic ways to
obtain SLIME, as indicated right on their main page. You can do a CVS
checkout of the SLIME repository, which allows you to follow it and
run the latest version. Or you can grab a snapshot of the repository,
which is provided, and dump it in there. Since I like you so much,
I'll give you a third option. Here's a Git repository, maintained by
someone very kind, that follows SLIME's CVS repository,
git clone git://git.boinkor.net/slime.git
Ultimately, you should have a directory ~/.emacs.d/slime/
that contains a bunch of SLIME source files directly inside.
Now, we tell Emacs where SLIME is and how to use it. Make
a .emacs
file in your home directory, if you haven't
already, and put this in it,
Once it's saved, either restart Emacs, or simply evaluate those lines
by putting the cursor after each them in turn and typing C-x
C-e
. If you did everything right so far, you shouldn't have any
errors. (If you did, go back up and see what you did wrong.) If your
Common Lisp installation didn't end up in your PATH as
"lisp
" (not uncommon) for some reason, you may need to
tell Emacs where it is. For example, I can point directly to my SBCL
installation with this line,
If everything is set up right, fire up SLIME with "M-x
slime
". It should compile the back-end, called swank, and run a
Common Lisp REPL as an inferior process to Emacs. You should end up
with a nice prompt like this,
CL-USER>
At this line, you can start evaluating lisp expressions as you
please. But this isn't where the true power of SLIME comes in
yet. I'll give you an example: make a new file with
a .lisp
extension and open it. Throw some lisp in there,
Type C-x C-k
and it will send the current buffer over to
be compiled and loaded. This code here uses a closure, so you know you
aren't accidentally using Emacs lisp, as it doesn't have closures. At
the REPL you can call it,
Which will print the return value, 11
. That's all there
is to it. You write code in the buffer, then with a simple keystroke
send it to the Common Lisp system to be evaluated and loaded. Because
the SLIME key bindings eclipse the Emacs lisp key bindings, you can
type this same line in the lisp source buffer place the cursor at the
end, and type C-x C-e, which will send it out to Common Lisp to be
evaluated. Look at the mode help (C-h m
) to see all the
key bindings made available.
This is a great programming environment that makes Common Lisp all the
more fun to use. You run a single, continuous instance if your program
growing it gradually. (This is exactly how I
built my Emacs web server with elisp.)
You can test your code as soon as soon as it's written.
The setup can get even more advanced. The Common Lisp REPL need not be
running on the same computer. It can be running on another computer,
as long as SLIME is able to connect to it over the network. Several
developers could even share a single Common Lisp process running on a
common machine. Lots of possibilities.
If you don't have a Common Lisp book yet,
there's Practical Common
Lisp, which you can read at no cost online
or download
for reading offline. It's based on an Emacs and SLIME setup, so you'll
be right on track.