Saturday, November 26, 2011

abcl-servlet unleashed to unsuspecting public...

In the scratching the itch department, one of the current problems I face is debugging vast quantities of code in various Java application servers to which I cannot easily attach a debugger. Surprising, I found that I could attach SLIME to a resident ABCL process in such application servers. Currently, I am in the process of extending that slim SLIME wedge to be able to use its interactive Lisp REPL as a poor man's debugger by dynamically specifying aspects of the program execution which I can use to access trace information.

The DSL I am working towards would allow the following statement, executed interactively in a running JVM to record the arguments and return value of the normalizeURI() function:

(defmethod :around org.example.normalizeURI (url url)
(push args)
(call-next-method)
(push result)
(return result))

A very early draft of code which runs against abcl-1.1.0-dev has been released for forks and comments which only gets as far as establishing the SLIME REPL inside a Tomcat container can be found at http://bitbucket.org/easye/abcl-servlet. At its base, this code is an incorporation of the code from abcl-web pioneered by Alex Mizrahi and then restored by Erik Hülsman.

Sunday, October 23, 2011

ABCL 1.0.0 released


On behalf of the developers of ABCL (Armed Bear Common Lisp) we are happy to be able to announce the 1.0.0 release on the premises of the European Common Lisp Meeting 2011.

ABCL is a Common Lisp implementation implemented in Java and running on the Java Virtual Machine (JVM) featuring both an interpreter and a compiler. The compiler targets the JVM directly meaning that its output is runnable JVM bytecode. The fact that ABCL is implemented in Java allows for relatively easy embedding in larger applications. For integration with existing applications ABCL completely implements the "JSR 223: Java scripting API" specification.

This release delivers the last requirement for ABCL's 1.0 release milestone, namely a conforming implementation of the long form of DEFINE-METHOD-COMBINATION. Additionally, the abcl-contrib mechanism now supports a robust collection of contributions to ABCL beyond ANSI concerned with dynamically linking JVM artifacts at runtime, packaging ASDF system construction within jar archives, and an optional higher-level domain specific syntax called JSS (Java Syntax Sucks) for manipulating JVM libraries. Extensive testing and debugging the implementation with popular Quicklisp systems has resulted in a much more rugged and battle-tested Lisp. A draft version of the user manual is now available.

The list of changes can be viewed at


If you have questions regarding use or licensing, or you find issues, please use the development email list for questions:

armedbear-devel at common-lisp dot net


Source distribution archives can be downloaded in ZIP or gzipped tar form:


Cryptographic signatures are available under:


In addition, binaries are also available:


With the associated cryptographic signatures:

Thursday, October 20, 2011

ABCL User Manual

In preparation for the upcoming ABCL 1.1.0 development release, we are releasing drafts of the ABCL User Manual for feedback.

The manual needs more love:  please submit patches to the [LaTex source][1].

[1]: http://osdir.com/ml/armedbear-devel/2011-09/msg00014.html

** Drafts




*** "Draft of upcoming abcl-1.1.0 User Manual":  abcl-manual-20120205a.pdf


*** "Rudi patches the documentation process from the version released withabcl-1.0.1 fresh from the sources via 'pdflatex' on January 28, 2012": abcl-20120124a.pdf.

Tuesday, September 20, 2011

Compilation fixes for CLOSURE-HTML landed on trunk

As part of the continued effort to increase ABCL's practical usability (as opposed to its theoretical compliance to the CLHS), we've fixed compilation problems where ABCL would crash with a stack overflow when compiling CLOSURE-HTML.

The problem turned out to be that ABCL's fasl format didn't support serialization of circular structures. Apparently, very few libraries actually use the ability to serialize circular literals, but CLOSURE-HTML does.

The fix required changing the FASL version number. If you're working off trunk, you'll be required to do a full recompile of your work.

Sunday, September 11, 2011

DEFINE-METHOD-COMBINATION (long form) no longer experimental

Last year around the same time ABCL 0.23 was released. This release featured experimental support for the long form of DEFINE-METHOD-COMBINATION. Last February I started testing our implementation using tests that I found in SBCL's test suite. Unfortunately, I quickly found the implementation wasn't labeled experimental without reason and started fixing the tests one by one.

After other priorities interrupted my work in March, I picked up the remaining work two weeks ago. Today, I committed the last test cases ported from SBCL's test suite. They all work. Particularly hard to get right were the ones involving the (:ARGUMENTS . arguments-list) cases.

With the status that we have now DEFINE-METHOD-COMBINATION (long form) is no longer considered experimental! We're another step closer to full CLHS compliance!

Saturday, September 3, 2011

ABCL 0.27.0 released




On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to
be able to announce the 0.27.0 release.


This release features - among other things - wider compatibility for Quicklisp encapsulated systems basedon reports for problems with ABCL: fixes for PARENSCRIPT, NAMED-READTABLES and CL-INTERPOL (CL-UNICODE fix).
Additionally, ABCL has regained the ability to build SBCL. The release notes can be found at:


 http://common-lisp.net/project/armedbear/release-notes-0.27.shtml


and the list of changes at:


 http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES




If you have questions regarding use or licensing, or you find issues, please
report back to the development list:


 armedbear-devel at common-lisp dot net




Source distribution archives can be downloaded in ZIP or gzipped tar form:


 abcl-src-0.27.0.tar.gz
 abcl-src-0.27.0.zip


Signatures are available under:
 abcl-src-0.27.0.tar.gz.asc
 abcl-src-0.27.0.zip.asc






In addition, binaries are also available:


 abcl-bin-0.27.0.tar.gz
 abcl-bin-0.27.0.zip


With associated signatures:
 abcl-bin-0.27.0.tar.gz.asc
 abcl-bin-0.27.0.zip.asc


JVM classpath integration (Maven et. al.)

Disclaimer: I loathe Maven. But I love users, so by unpopular (to me) demand as part of the upcoming abcl-0.27.0 release we've bowed to the inevitable by adding integration for Armedb Bear Common Lisp with Maven in svn r13550.

We've added the ASDF:MVN subclass ASDF:COMPONENT (by way of of ASDF:IRI) that refers to a purely virtual artifact, namely a given jar specified as a mvn dependency whose classes will be loaded in the hosting JVM (i.e. added to the running *classpath*).

The following 'log4j.asd' placed in a file on your local filesystem and then added the the ASDF:*CENTRAL-REGISTRY*:
     ;;;; -*- Mode: LISP -*-

(in-package :asdf)
(defsystem :log4j
:components ((:mvn "log4j/log4j"
:version "1.4.9")))

then when the abcl-contrib.jar is loaded via

CL-USER> (require 'abcl-asdf)

an invocation of

CL-USER> (asdf:load-system 'log4j)

with ensure that log4j-1.4.9.jar and all its transitive dependencies as defined by the distributed Maven POM descriptions will be downloaded to the local filesystem if not already present. It will then dynamically add all of these Java classes to the currently hosting JVM.

Further details about additional ASDF extensions for both individual jar files and contents of directories are documented within the contrib/abcl-asdf/README.markdown file from SVN trunk.

Thanks to Alan Ruttenburg for great inspiration (and code) from invoke.lisp which was the first extension to ASDF that could actuall dynamically add jar files to the hosting JVM process.

Thursday, August 25, 2011

Building SBCL with ABCL

In revisiting our compiler for various improvements, it is helpful to have challenging compilations to perform so that we have some confidence we don't break things along the way. One of the more complicated tasks we've found is using ABCL as a build host to compile SBCL which has seemingly has lots of twisty little macros, all different. A while ago, maybe perhaps a year ago, we broke this behavior, closing off this avenue of testing.

But due to recent work, as of ABCL trunk r13538 we've restored this capability, once again making ABCL capable of bootstrapping an SBCL build. This may prove handy for individuals who wish to port SBCL to new platforms where there is a JVM available.

When we mentioned this on #lisp, we were asked how long it takes ABCL to build SBCL vs. SBCL building itself.

ABCL building SBCL
//build started:  Thu Aug 25 15:12:30 CEST 2011

//build finished: Thu Aug 25 16:49:30 CEST 2011
real 96m59.819s
user 37m35.702s
sys 32m44.641s

SBCL building SBCL
//build started:  Thu Aug 25 16:51:34 CEST 2011

//build finished: Thu Aug 25 17:07:47 CEST 2011
real 16m12.855s
user 4m40.804s
sys 3m28.145s


So, ABCL is roughly a factor of six slower building SBCL than SBCL itself.

Friday, August 19, 2011

Fixed: cl-unicode compilation

cl-unicode contains a few files which contain literal values which - when serialized to a string - result in strings larger than 64kB. Until today, this was a problem for ABCL because the limit for a constant string in a java class file is 64kB and all serialized objects used to be stored that way.

Today, this issue was fixed by storing strings over 64kB as resource files in the JARs being generated. The result is that cl-unicode and the libraries it is a dependency for - such as cl-interpol - can now successfully be compiled using ABCL.

Monday, August 15, 2011

Log tickets and edit the wiki using your Gmail account

Today, I installed the module AuthOpenID for Trac on ABCL's hosting environment. You can now log in and contribute to the wiki or log your tickets without owning a common-lisp.net login!

Happy contributing!

ABCL 0.26.2 released

A new patch release is available for ABCL: 0.26.2. This release fixes an important regression on windows where ABCL couldn't load fasls with spaces in their filenames.

Additionally, the SETF expander for APPLY is fixed to allow use with non-CL functions to support CL-CONTAINERS - another small step to support the most popular libraries in Quicklisp.

Sunday, July 31, 2011

ABCL runs on newly released Java 7

Co-developer Mark Evenson tried to compile ABCL on the recently released Java 7 today. The results are very good: compilation succeeds with the minor addition of a patch to specify the Java source conformance, while running the ANSI tests shows we'll need to look at only a very small number of ANSI test cases (5 or 6, I believe) which have regressed since Java 6.

Conclusion: ABCL works with Java 7.

Wednesday, July 27, 2011

ABCL 0.26.1 released

On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to be able to announce the 0.26.1 release.

ABCL is a Common Lisp implementation implemented in Java and running on the JVM, featuring both an interpreter and a compiler. The compiler targets the JVM directly meaning that its output is runnable JVM bytecode. The fact that ABCL is written in Java allows for relatively easy embedding in larger
applications. For integration with existing applications ABCL implements JSR 223: Java scripting API.

This release features - among lots of other things - a major reduction in the number of failures in the ANSI test suite: dropping from 26 to 16 failures on some systems (of 21699 tests in total).  Additionally, ABCL now runs Hunchentoot and several other packages from the top downloads from Quicklisp. Please read the release notes and the CHANGES file for more. Version 0.26.0 has not been released due to regressions fixed in this version.

If you have questions regarding use or licensing, or you find issues, please report back to the development list:

 armedbear-devel at common-lisp dot net


Source distribution archives can be downloaded in ZIP or gzipped tar form:
 abcl-src-0.26.1.tar.gz
 abcl-src-0.26.1.zip

Signatures are available under:
 abcl-src-0.26.1.tar.gz.asc
 abcl-src-0.26.1.zip.asc


In addition, binaries are also available:

 abcl-bin-0.26.1.tar.gz
 abcl-bin-0.26.1.zip

With associated signatures:
 abcl-bin-0.26.1.tar.gz.asc
 abcl-bin-0.26.1.zip.asc

Sunday, July 3, 2011

Upcoming release (0.26)

This time, we've deviated from the bi-monthly release cycle. Two months ago, it was time to release 0.26 and it would have been time to release 0.27 now.

However, with some of the development team heavily involved in the migration of common-lisp.net, we decided to skip a release. It's release time now, so, it's time to release 0.26 sometime this week.

If you have time to test the current trunk version of ABCL with your favorite application, please do and submit your findings: hopefully we can fix them before the actual release!

This release contains the -very often wished for- improvement for deployment: compilation of ASDF systems into JAR files! And much more... 

Sunday, June 5, 2011

Repository available over HTTP for anonymous checkout

It's been quiet over the past months in this forum. Most of that time was spent upgrading running box common-lisp.net and the services it offers. I'm glad to be able to announce to all of you behind corporate proxies that ABCL can now be checked out over HTTP!
To do so:

svn co http://svn.common-lisp.net/armedbear/trunk abcl
 Enjoy!

Thursday, March 17, 2011

Quicklisp helps focus ABCL development

One of the great side effects from Quicklisp to us as the developers of an implementation, is the fact that for the first time since my last 10 years of lisp hacking, statistics have been published regarding system downloads.

 Within the ABCL community, this list has been picked up as a signal from users telling us what they find important: Starting from the top, we've started compiling quicklisp provided systems and fixing the issues we found. Mark Evenson is working to fix bordeaux-threads on ABCL. Ville Voutilainen implemented an implementation-specific extension to DIRECTORY in order not to resolve symlinks required by Quicklisp itself. While Erik Huelsmann has been working to implement trivial-garbage required functionalities weak references, object finalizers and weak hash tables.

Thursday, March 10, 2011

ABCL 0.25.0 released

On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to be able to announce the 0.25.0 release.

ABCL is a Common Lisp implementation implemented in Java and running on the JVM, featuring both an interpreter and a compiler. The compiler targets the JVM directly meaning that its output is runnable JVM bytecode. The fact that ABCL is written in Java allows for relatively easy embedding in larger
applications. For integration with existing applications ABCL implements JSR 223: Java scripting API.


This release features - among lots of other things - a major refactoring of the compiler to be more robust in light of Java class file verification and object instantiation (MAKE-INSTANCE) performace improvements.
You can find the full release notes at:

http://common-lisp.net/project/armedbear/release-notes-0.25.shtml

and the list of changes at:

http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES


If you have questions regarding use or licensing, or you find issues, please report back to the development list:

armedbear-devel at common-lisp dot net


Source distribution archives can be downloaded in ZIP or gzipped tar form:

http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-src-0.25.0.tar.gz
http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-src-0.25.0.zip

Signatures are available under:
http://common-lisp.net/project/armedbear/0.25.0/releases/abcl-src-0.25.0.tar.gz.asc
http://common-lisp.net/project/armedbear/0.25.0/releases/abcl-src-0.25.0.zip.asc



In addition, binaries are also available:

http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-bin-0.25.0.tar.gz
http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-bin-0.25.0.zip

With associated signatures:
http://common-lisp.net/project/armedbear/releases/abcl-bin-0.25.0.tar.gz.asc
http://common-lisp.net/project/armedbear/releases/abcl-bin-0.25.0.zip.asc


Finally, this is the first release to be also officially hosted on the Maven Central repository, and thus usable without hassle in Maven projects. Refer to the relevant wiki page for details: http://trac.common-lisp.net/armedbear/wiki/MavenSupport

Tuesday, March 1, 2011

Bootstrapping Quicklisp on ABCL

The other day, I decided that - as many others have done before me - I'd give Quicklisp a go. Being on Windows (and ABCL), I was expecting a bumpy ride.

Turns out I was completely wrong: all I needed was a simple
CL-USER> (load "http://beta.quicklisp.org/quicklisp.lisp")   [!!]

Quicklisp downloaded all its data nicely into my home directory (which - on ABCL/Win - is C:\Users\, C:\Users\Erik in my case). When I need a new ABCL session, for whatever reason, the only thing I need to type to get quicklisp loaded from my local install is:
CL-USER> (load "c:/users/erik/quicklisp/setup.lisp")

That's it. That's all. No bumpy ride. No ABCL issues. It Just Works!

Thanks Zach!



[!!] Warning: you may not want to do it that way, since it will execute the code from the web UNSEEN by you; you won't have a chance to see any security attacks on your PC by anybody slipping in a file which contains the lisp equivalent of "FORMAT C: /Y"

Wednesday, February 16, 2011

Summer of the Bear

We're starting to coordinate [discussion of project that ABCL developers wish to mentor][1] for the Summer of the Bear 2011.

Drop by on IRC via [#summeroflisp][] or [#abcl][] for ideas or feedback.

[1]: http://trac.common-lisp.net/armedbear/wiki/GSoC2011
[#summeroflisp]: http://webchat.freenode.net/
[#abcl]: http://webchat.freenode.net/

Tuesday, February 15, 2011

CLOS work on trunk

Over the past few days, work has been going on with respect to our CLOS implementation again. There were a few outstanding issues - some of them rather long already.

One of such longer standing issues was the performance of object instantiation. In the CLHS there's a specific section about the validity of initialization arguments (initargs) and which ones are to be considered valid. A number of improvements have been committed to trunk:
1. The check has been generalized to support all four cases of that specific section of the CLHS.
2. The checks done during object instantiation have been a performance bottleneck ever since they were implemented; as an improvement, a cache has been implemented, speeding up object instantiation significantly: the performance has been doubled (ie the same amount of time now allows creation of twice as many objects).


On a completely different subject (within CLOS), we had an issue where instantiation of an object depending on a forward referenced class caused evaluation to be aborted, without useful feedback. While fixing this issue could have been done quickly and completely unrelated to other changes, I decided to change the behaviour of some of the functions involved according to the AMOP class finalization specification.

So we have taken some small steps on the long (and hard) road toward a performant CLOS/AMOP implementation on the JVM again!

Saturday, January 22, 2011

ABCL 0.24.0 released

This release features - among lots of other things - improved embedding support through elimination of System.exit() calls and fixes a regression causing FASLs to be limited in the number of functions they can contain.
You can find the full release notes at:

 http://common-lisp.net/project/armedbear/release-notes-0.24.shtml

and the list of changes at:

 http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES


If you have questions regarding use or licensing, or you find issues, please report back to the development list:

 armedbear-devel at common-lisp dot net


Source distribution archives can be downloaded in ZIP or gzipped tar form:

 http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-src-0.24.0.tar.gz
 http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-src-0.24.0.zip

Signatures are available under:
 http://common-lisp.net/project/armedbear/0.24.0/releases/abcl-src-0.24.0.tar.gz.asc
 http://common-lisp.net/project/armedbear/0.24.0/releases/abcl-src-0.24.0.zip.asc



In addition, binaries are also available:

 http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-bin-0.24.0.tar.gz
 http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-bin-0.24.0.zip

With associated signatures:
 http://common-lisp.net/project/armedbear/releases/abcl-bin-0.24.0.tar.gz.asc
 http://common-lisp.net/project/armedbear/releases/abcl-bin-0.24.0.zip.asc