Skip to content

Latest commit

 

History

History

common-lisp

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

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 and cl-launch depends on it. You can install it on Ubuntu using apt the package is cl-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

ImplementationNickname
Steel Bank Common Lispsbcl
Clozure Common Lispccl
CMU Common Lispcmucl
GNU CLISPclisp
Embeddable Common Lispecl
ManKai Common Lispmkcl
Allegro CLallegro
Armed Bear Common Lispabcl

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.

ImplementationBinary Path
Steel Bank Common LispSBCL
Clozure Common LispCCL
CMU Common LispCMUCL
GNU CLISPCLISP
Embeddable Common LispECL
ManKai Common LispMKCL
Allegro CLALLEGRO
Armed Bear Common LispABCL

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