This is a portable implementation of MAL in Common Lisp. It has been tested to work with following Common Lisp implementations
- Steel Bank Common Lisp http://sbcl.org/
- Clozure Common Lisp http://ccl.clozure.com/
- CMU Common Lisp https://www.cons.org/cmucl/
- GNU CLISP http://www.clisp.org/
- Embeddable Common Lisp https://common-lisp.net/project/ecl/
- ManKai Common Lisp https://common-lisp.net/project/mkcl/
- Allegro CL http://franz.com/products/allegro-common-lisp/
- Armed Bear Common Lisp http://abcl.org/
cl-launch to build executable/wrapper scripts for most of the above implementations.
- cl-launch For building command line executable scripts. See cl-launch
- quicklisp For installing dependencies. See quicklisp
- readline
For readline integration. You can install it on Ubuntu using apt the package
is
libreadline-dev. If you wish to run the implementation using Allegro CL, you will also have to install the 32 bit version of readline (lib32readline-devon Ubuntu) - (Optional) asdf
This is needed if you want to run the implementation using GNU CLISP, since
GNU CLISP does not ship with
asdfandcl-launchdepends on it. You can install it on Ubuntu using apt the package iscl-asdf
By default the MAL is built using sbcl, you can control this using LISP
environment variable. The variable should be set to the cl-launch “nickname” for
implementation. The nicknames that work currently are
| Implementation | Nickname |
|---|---|
| Steel Bank Common Lisp | sbcl |
| Clozure Common Lisp | ccl |
| CMU Common Lisp | cmucl |
| GNU CLISP | clisp |
| Embeddable Common Lisp | ecl |
| ManKai Common Lisp | mkcl |
| Allegro CL | allegro |
| Armed Bear Common Lisp | abcl |
For example to build with GNU CLISP, you need to do the following
cd common-lisp ; LISP=clisp makeYou can control the implementation binary used for the build using environment variables. For a given implementation nickname, the environment variable will be the capitalization of the given nickname.
| Implementation | Binary Path |
|---|---|
| Steel Bank Common Lisp | SBCL |
| Clozure Common Lisp | CCL |
| CMU Common Lisp | CMUCL |
| GNU CLISP | CLISP |
| Embeddable Common Lisp | ECL |
| ManKai Common Lisp | MKCL |
| Allegro CL | ALLEGRO |
| Armed Bear Common Lisp | ABCL |
For example to build MAL with Clozure CL installed in
\~/.roswell/impls/x86-64/linux/ccl-bin/1.11/lx86cl64, you need to do the
following
cd common-lisp ; LISP=ccl CCL=~/.roswell/impls/x86-64/linux/ccl-bin/1.11/lx86cl64 makeYou can use the variables *cl-implementation* and *cl-version* can be used
to in MAL REPL to check the Common Lisp implementation and the version used for
building it.
There is some basic interop in the form cl-eval which takes a string and
evaluates it as Common Lisp code, the result is returned in form of a MAL value,
as such you are limited to code that produces values that have MAL counterparts.
ABCL takes a long to boot as such it needs to be run with TEST_OPTS set to
--start-timeout 120