- Reorder README to have implementation list after "learning tool" bullet. - This also moves tests/ and libs/ into impls. It would be preferrable to have these directories at the top level. However, this causes difficulties with the wasm implementations which need pre-open directories and have trouble with paths starting with "../../". So in lieu of that, symlink those directories to the top-level. - Move the run_argv_test.sh script into the tests directory for general hygiene.
3.7 KiB
Implementation of MAL in Common Lisp
Introduction
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.
Dependencies
- 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-dev
on Ubuntu) - (Optional) asdf
This is needed if you want to run the implementation using GNU CLISP, since
GNU CLISP does not ship with
asdf
andcl-launch
depends on it. You can install it on Ubuntu using apt the package iscl-asdf
Running using different implementations
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 make
You 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 make
You 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.
Interop
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.
Known Issues
ABCL takes a long to boot as such it needs to be run with TEST_OPTS
set to
--start-timeout 120