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!

Sunday, January 23, 2011

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

Saturday, December 18, 2010

Integrating ABCL with Ant - the second step

While working to extend the ABCL integration into the ABCL-web Ant-based build - the project that I started in my previous post - I spent a lot of time trying to find a way to calculate the output paths, based on the names of the input paths.

Given the lisp way of 1-to-1 correspondence between a lisp file and a fasl, I expected this to be a trivial task to be done at the build system level. So, I kept searching for a solution in Ant (using standard components only). Surely I found the pathconvert and mapper building blocks, however, neither really seemed to work as the latter turned out not to be a generic mechanism but to be supported only by specific tasks (such as apply) and the former converts its output to a string instead of a set of paths.

Realizing that the issue of mapping source paths to output paths was left to the individual tasks, I turned to abcl to solve the problem as part of the compilation script. The final script between the CDATA tags as presented in the previous post looks like this:

(let* ((the-project (jcall "getProject" self))
       (src-iterator (jcall (jmethod "org.apache.tools.ant.types.Path" "iterator")
                            (jcall "getReference" the-project "lisp-files")))
       (src-wildcard (pathname (format nil "~A**/*.lisp" (jcall "getProperty" the-project "build.src.dir"))))
       (dst-wildcard (pathname (format nil "~A**/*.abcl" (jcall "getProperty" the-project "build.dst.dir")))))
   (when (and (jcall "hasNext" src-iterator))
     (loop
        for src-path = (pathname (jcall (jmethod "java.lang.Object" "toString")
                                 (jcall "next" src-iterator)))
        for dst-path = (translate-pathname src-path src-wildcard dst-wildcard)
        do (compile-file src-path :output-file dst-path)
        while (and (jcall "hasNext" src-iterator)))))

It's based on 2 properties having been defined: "build.src.dir" and "build.dst.dir". In addition, it wants a set of paths (fileset or path set) to be defined called "lisp-files". Iterating over the set of source files, it calculates the output file by replacing a path prefix and the file extension.

In my NetBeans project settings, I had to exclude "**/*.lisp" from packaging in the destination JAR file.

Now the JAR contains the fasl instead of the source file!

Do you have useful or resourceful ABCL based scripts plugged into Ant? Let me know and post a reaction.