Armed Bear Common Lisp is distributed under the GNU GPL with Classpath exception. It was originally created as a component of the Armed Bear J editor, where it serves as an extension language (rather like Emacs Lisp for Emacs). It is now maintained as a standalone implementation.
ABCL runs quite well with SLIME, which allows you to connect to an ABCL process from within Emacs.
Portability
Armed Bear Common Lisp requires Java 1.6 or later. It runs much better with a JVM that features a JIT, such as (for Linux/x86) the IBM or Sun virtual machines. It also runs, though very slowly, with the GNU gij virtual machine, as of version 3.3, and (with some exceptions) with SableVM as of version 1.0.9. It is also possible to use recent versions of the GNU Java compiler gcj to produce a standalone native executable.Accessing Java from ABCL
ABCL gives you access to all those methods in the Java runtime environment. This is implemented using the Java Reflection API. To call a static method, use the jstatic function:
(jstatic "gc" "java.lang.System") (jstatic "getProperty" "java.lang.System" "user.dir")
To obtain a reference to a Java method, call jmethod with the class name, method name, and parameter types:
(jmethod "java.lang.Runtime" "availableProcessors")
To invoke a (non-static) Java method, use jcall with the reference to the method, a reference to the invoked object, and the method arguments:
(jcall (jmethod "java.lang.Runtime" "availableProcessors") (jstatic "getRuntime" "java.lang.Runtime"))
To invoke a constructor, use jconstructor
and
jnew
in place of jmethod
and
jcall
.
(jnew (jconstructor "java.lang.Object"))
There are a fair number of (poorly) documented Java specific Lisp extensions in the JAVA package. Currently, reading the source to 'java.lisp' while experimenting with the REPL is probably the best way to come to an understanding of what is available.
Of common interest is the JAVA:JINTERFACE-IMPLEMENTATION function, which allows one to implement a Java interface in Common Lisp.
Extensions
Alan Ruttenberg's JSS provides a more convenient syntax for calling Java. It is now packaged with the distribution as part of ABCL-CONTRIB.
abcl-memory-compiler is a way to compile Java source code to create Java classes at runtime with ABCL.
Obtaining
This project is now hosted at common-lisp.net https://armedbear.common-lisp.dev/.
Source distribution
Binary distribution
A pre-built JAR binary can be downloaded from
It can be utilized viajava -jar abcl.jar
Source
The source code for the ABCL implementation is synchronized between the following locations:
- git+https://github.com/armedbear/abcl/
- git+https://gitlab.common-lisp.net/abcl/abcl/
- svn+https://abcl.org/svn
Once obtained, the easiest way to build the source is to use the Java build tool Ant:
cmd$ cd abcl; ant
This compiles ABCL, then creates an executable ('abcl.bat' under win32, 'abcl' otherwise) which can be used to invoke the Bear.
Issues
A Trac instance for ABCL issues has been created on common-lisp.net. Login is possible with an OpenID, such as a google.com account. Additional issues may be raised by posting a message to the mailing list noted below.
We also accept issues requests on Github and the Common-Lisp.net hosted Gitlab.
Mailing List
ABCL developers use the https://mailman.common-lisp.net/pipermail/armedbear-devel/ mailing list hosted on common-lisp.net. This supersedes the mailing list associated with armedbear-j development, which is still monitored for contributions.