<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4235439971837126416</id><updated>2012-01-28T03:57:31.680-08:00</updated><category term='mobile'/><category term='correctness'/><category term='url'/><category term='condition'/><category term='contributing'/><category term='wiki'/><category term='hash table'/><category term='development'/><category term='bootstrapping'/><category term='http'/><category term='Lisp'/><category term='common lisp'/><category term='dynamically introspecting legacy JVM processes'/><category term='safety'/><category term='types'/><category term='threading'/><category term='Quicklisp'/><category term='executable'/><category term='standalone'/><category term='Trac'/><category term='compilation'/><category term='stand alone'/><category term='N900'/><category term='performance'/><category term='abcl user manual'/><category term='DEFINE-METHOD-COMBINATION'/><category term='repository'/><category term='emacs'/><category term='cygwin'/><category term='Nokia'/><category term='GAE'/><category term='Maxima'/><category term='improvement'/><category term='memory'/><category term='Java'/><category term='jvm'/><category term='thread'/><category term='Google App Engine'/><category term='bindings'/><category term='CLOS'/><category term='slime'/><category term='AMOP'/><category term='ABCL'/><category term='abcl release 1.0.1'/><category term='stack'/><category term='integration'/><category term='special bindings'/><category term='build'/><category term='conformance'/><category term='fix'/><category term='pathname'/><category term='release'/><category term='error'/><category term='restarted'/><category term='uri'/><category term='Ant'/><category term='renewed'/><title type='text'>ABCL</title><subtitle type='html'>Development of the Armed Bear Common Lisp implementation</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>56</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-7497101764971053727</id><published>2012-01-24T14:32:00.000-08:00</published><updated>2012-01-24T14:32:46.274-08:00</updated><title type='text'>Closing in on CLOSER-MOP in abcl-1.1.0-dev</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In response to inquiries recently on #abcl (from @loke among others), we'd like to point out that recent work on the &lt;a href="http://trac.common-lisp.net/armedbear/timeline"&gt;Armed Bear trunk&lt;/a&gt;--what will be &lt;a href="http://trac.common-lisp.net/armedbear/milestone/1.1.0"&gt;abcl-1.1-&lt;/a&gt;-by &lt;a href="http://article.gmane.org/gmane.lisp.armedbear.devel/2166"&gt;Rudi&lt;/a&gt;&amp;nbsp;has started to converge on a plausible AMOP strategy. &amp;nbsp;Stay tuned.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-7497101764971053727?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/7497101764971053727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2012/01/closing-in-on-closer-mop-in-abcl-110.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/7497101764971053727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/7497101764971053727'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2012/01/closing-in-on-closer-mop-in-abcl-110.html' title='Closing in on CLOSER-MOP in abcl-1.1.0-dev'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-3727092363332751919</id><published>2012-01-10T15:29:00.001-08:00</published><updated>2012-01-10T15:50:21.706-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='abcl release 1.0.1'/><title type='text'>ABCL 1.0.1 Released</title><content type='html'>All users of abcl-1.0.0 are recommended to migrate to abcl-1.0.1 as it fixes the abcl-contrib mechanism, an unfortunate oversight in our giddiness at being able to release at ECLM 2011.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now the following incantation&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    (require 'abcl-contrib)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;    (require 'jss)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;should result in a working JSS.&lt;br /&gt;&lt;br /&gt;In addition to restoring the loading of ASDF definitions from jar archives, we've randomized some of our String hashes to prevent a purported JVM exploit spotted recently and shipped with ASDF-2.019.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;You can find more in the release notes at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://common-lisp.net/project/armedbear/release-notes-1.0.1.shtml"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://common-lisp.net/project/armedbear/release-notes-1.0.1.shtml"&gt;http://common-lisp.net/project/armedbear/release-notes-1.0.1.shtml&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;and the list of changes at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trac.common-lisp.net/armedbear/browser/tags/1.0.1/abcl/CHANGES"&gt;http://trac.common-lisp.net/armedbear/browser/tags/1.0.1/abcl/CHANGES&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Source and binary distribution archives with associated cryptographic&lt;br /&gt;signatures can be downloaded in ZIP or gzipped tar from:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/1.0.1"&gt;http://common-lisp.net/project/armedbear/releases/1.0.1&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;If you have questions regarding use or licensing, or you find issues, please&lt;br /&gt;report back to the development list:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  armedbear-devel at common-lisp dot net&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-3727092363332751919?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/3727092363332751919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2012/01/abcl-101-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3727092363332751919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3727092363332751919'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2012/01/abcl-101-released.html' title='ABCL 1.0.1 Released'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-5747490358009951467</id><published>2011-11-26T06:17:00.000-08:00</published><updated>2011-11-28T23:12:27.661-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dynamically introspecting legacy JVM processes'/><category scheme='http://www.blogger.com/atom/ns#' term='common lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><category scheme='http://www.blogger.com/atom/ns#' term='jvm'/><title type='text'>abcl-servlet unleashed to unsuspecting public...</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(defmethod :around org.example.normalizeURI (url url)&lt;br /&gt;  (push args)&lt;br /&gt;  (call-next-method)&lt;br /&gt;  (push result)&lt;br /&gt;  (return result))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;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 &lt;a href="http://bitbucket.org/easye/abcl-servlet"&gt;http://bitbucket.org/easye/abcl-servlet&lt;/a&gt;.  At its base, this code is an incorporation of the code from &lt;a href="http://google.com/?q=abcl-web"&gt;abcl-web&lt;/a&gt; pioneered by Alex Mizrahi and then restored by Erik Hülsman.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-5747490358009951467?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/5747490358009951467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/11/abcl-servlet-unleashed-to-unsuspecting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5747490358009951467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5747490358009951467'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/11/abcl-servlet-unleashed-to-unsuspecting.html' title='abcl-servlet unleashed to unsuspecting public...'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-5939863660213027578</id><published>2011-10-23T08:59:00.000-07:00</published><updated>2011-11-02T06:47:54.313-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='DEFINE-METHOD-COMBINATION'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>ABCL 1.0.0 released</title><content type='html'>&lt;div class="Apple-style-span" style="font-family: Georgia, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://download.oracle.com/javase/6/docs/technotes/guides/scripting/index.html"&gt;"JSR 223: Java scripting API" specification&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://abcl-dynamic-install.googlecode.com/files/abcl-20111102a.pdf"&gt;draft version of the user manual&lt;/a&gt; is now available.&lt;br /&gt;&lt;br /&gt;The list of changes can be viewed at&lt;br /&gt;&lt;div&gt;&lt;a style="font-size: 80%" href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES" target="_blank"&gt;http://trac.common-lisp.net/&lt;wbr&gt;armedbear/browser/trunk/abcl/&lt;wbr&gt;CHANGES&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If you have questions regarding use or licensing, or you find issues, please use the development email list for questions:&lt;br /&gt;&lt;br /&gt;&lt;pre style="margin-left: 20%"&gt;armedbear-devel at common-lisp dot net&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Source distribution archives can be downloaded in ZIP or gzipped tar form:&lt;br /&gt;&lt;div style="font-size: 70%"&gt;&lt;br /&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/1.0.0/abcl-src-1.0.0.tar.gz" style="color: #0000cc;" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/releases/1.&lt;wbr&gt;0.0/abcl-src-1.0.0.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/1.0.0/abcl-src-1.0.0.zip" style="color: #0000cc;" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/releases/1.&lt;wbr&gt;0.0/abcl-src-1.0.0.zip&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Cryptographic signatures are available under:&lt;br /&gt;&lt;div style="font-size: 70%"&gt;&lt;br /&gt;&lt;a href="http://common-lisp.net/project/armedbear/1.0.0/releases/abcl-src-1.0.0.tar.gz.asc" style="color: #0000cc;" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/1.0.0/&lt;wbr&gt;releases/abcl-src-1.0.0.tar.&lt;wbr&gt;gz.asc&lt;/a&gt;&lt;br /&gt;&lt;a href="http://common-lisp.net/project/armedbear/1.0.0/releases/abcl-src-1.0.0.zip.asc" style="color: #0000cc;" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/1.0.0/&lt;wbr&gt;releases/abcl-src-1.0.0.zip.&lt;wbr&gt;asc&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;In addition, binaries are also available:&lt;br /&gt;&lt;div style="font-size: 70%"&gt;&lt;br /&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/1.0.0/abcl-bin-1.0.0.tar.gz" style="color: #0000cc;" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/releases/1.&lt;wbr&gt;0.0/abcl-bin-1.0.0.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/1.0.0/abcl-bin-1.0.0.zip" style="color: #0000cc;" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/releases/1.&lt;wbr&gt;0.0/abcl-bin-1.0.0.zip&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;With the associated cryptographic signatures:&lt;br /&gt;&lt;div style="font-size: 70%"&gt;&lt;br /&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-1.0.0.tar.gz.asc" style="color: #0000cc;" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/releases/&lt;wbr&gt;abcl-bin-1.0.0.tar.gz.asc&lt;/a&gt;&lt;br /&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-1.0.0.zip.asc" style="color: #0000cc;" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/releases/&lt;wbr&gt;abcl-bin-1.0.0.zip.asc&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-5939863660213027578?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/5939863660213027578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/10/abcl-100-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5939863660213027578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5939863660213027578'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/10/abcl-100-released.html' title='ABCL 1.0.0 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6968671027312430995</id><published>2011-10-20T01:35:00.000-07:00</published><updated>2012-01-28T03:57:31.714-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='abcl user manual'/><title type='text'>ABCL User Manual</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div&gt;In preparation for the upcoming ABCL 1.0.1 maintenance  release, we are releasing drafts of the ABCL User Manual for feedback.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;** Drafts&lt;br /&gt;&lt;br /&gt;Rudi patches the documentation process from the version released withabcl-1.0.1 fresh from the sources via 'pdflatex' on January 28, 2012 &lt;a href="http://code.google.com/p/abcl-dynamic-install/downloads/detail?name=abcl-20120110a.pdf"&gt;abcl-20120124a.pdf&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6968671027312430995?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6968671027312430995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/10/abcl-user-manual-draft.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6968671027312430995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6968671027312430995'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/10/abcl-user-manual-draft.html' title='ABCL User Manual'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6035487621918736382</id><published>2011-09-20T13:43:00.000-07:00</published><updated>2011-09-20T13:43:53.264-07:00</updated><title type='text'>Compilation fixes for CLOSURE-HTML landed on trunk</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6035487621918736382?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6035487621918736382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/09/compilation-fixes-for-closure-html.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6035487621918736382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6035487621918736382'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/09/compilation-fixes-for-closure-html.html' title='Compilation fixes for CLOSURE-HTML landed on trunk'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-3623957110665756034</id><published>2011-09-11T12:50:00.000-07:00</published><updated>2011-09-11T12:50:16.477-07:00</updated><title type='text'>DEFINE-METHOD-COMBINATION (long form) no longer experimental</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;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.&amp;nbsp;Particularly hard to get right were the ones involving the (:ARGUMENTS . arguments-list) cases.&lt;br /&gt;&lt;br /&gt;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!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-3623957110665756034?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/3623957110665756034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/09/define-method-combination-long-form-no.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3623957110665756034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3623957110665756034'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/09/define-method-combination-long-form-no.html' title='DEFINE-METHOD-COMBINATION (long form) no longer experimental'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-351305419410886</id><published>2011-09-03T12:11:00.000-07:00</published><updated>2011-09-03T12:11:01.497-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='correctness'/><category scheme='http://www.blogger.com/atom/ns#' term='Quicklisp'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>ABCL 0.27.0 released</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;be able to announce the 0.27.0 release.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;This release features - among other things - wider compatibility for Quicklisp&amp;nbsp;encapsulated systems basedon reports for problems with ABCL: fixes for&amp;nbsp;PARENSCRIPT, NAMED-READTABLES and CL-INTERPOL (CL-UNICODE fix).&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;Additionally,&amp;nbsp;ABCL has regained the ability to build SBCL.&amp;nbsp;The release notes&amp;nbsp;can be found at:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/release-notes-0.27.shtml"&gt;http://common-lisp.net/project/armedbear/release-notes-0.27.shtml&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;and the list of changes at:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&amp;nbsp;&lt;a href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES"&gt;http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;If you have questions regarding use or licensing, or you find issues, please&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;report back to the development list:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&amp;nbsp;armedbear-devel at common-lisp dot net&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;Source distribution archives can be downloaded in ZIP or gzipped tar form:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.27.0/abcl-src-0.27.0.tar.gz"&gt;abcl-src-0.27.0.tar.gz&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.27.0/abcl-src-0.27.0.zip"&gt;abcl-src-0.27.0.zip&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;Signatures are available under:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/0.27.0/releases/abcl-src-0.27.0.tar.gz.asc"&gt;abcl-src-0.27.0.tar.gz.asc&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/0.27.0/releases/abcl-src-0.27.0.zip.asc"&gt;abcl-src-0.27.0.zip.asc&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;In addition, binaries are also available:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.27.0/abcl-bin-0.27.0.tar.gz"&gt;abcl-bin-0.27.0.tar.gz&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.27.0/abcl-bin-0.27.0.zip"&gt;abcl-bin-0.27.0.zip&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;With associated signatures:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.27.0.tar.gz.asc"&gt;abcl-bin-0.27.0.tar.gz.asc&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.27.0.zip.asc"&gt;abcl-bin-0.27.0.zip.asc&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-351305419410886?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/351305419410886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/09/abcl-0270-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/351305419410886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/351305419410886'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/09/abcl-0270-released.html' title='ABCL 0.27.0 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-406986359649992518</id><published>2011-09-03T00:46:00.000-07:00</published><updated>2011-09-03T02:58:45.921-07:00</updated><title type='text'>JVM classpath integration (Maven et. al.)</title><content type='html'>Disclaimer:  I loathe Maven.  But I love users, so by unpopular (to me) demand as part of the &lt;a href="http://trac.common-lisp.net/armedbear/browser/branches/0.27.x"&gt;upcoming abcl-0.27.0 release &lt;/a&gt;we've bowed to the inevitable by adding integration for Armedb Bear Common Lisp with &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; in &lt;a href="http://trac.common-lisp.net/armedbear/changeset/13550"&gt;svn r13550.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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*).&lt;br /&gt;&lt;br /&gt;The following 'log4j.asd' placed in a file on your local filesystem and then added the the ASDF:*CENTRAL-REGISTRY*:&lt;br /&gt;&lt;pre style="font-family:courier new;"&gt;     ;;;; -*- Mode: LISP -*-&lt;br /&gt;   (in-package :asdf)&lt;br /&gt;   (defsystem :log4j&lt;br /&gt;     :components ((:mvn "log4j/log4j"&lt;br /&gt;                   :version "1.4.9")))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;then when the abcl-contrib.jar is loaded via&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   CL-USER&amp;gt; (require 'abcl-asdf)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;an invocation of&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   CL-USER&amp;gt; (asdf:load-system 'log4j)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Further details about additional ASDF extensions for both individual jar files and contents of directories are documented within the &lt;a style="font-family: courier new;" href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/contrib/abcl-asdf/README.markdown"&gt;contrib/abcl-asdf/README.markdown&lt;/a&gt; file from SVN trunk.&lt;br /&gt;&lt;br /&gt;Thanks to Alan Ruttenburg for great inspiration (and code) from &lt;a href="http://code.google.com/p/lsw2/source/browse/trunk/jss/invoke.lisp"&gt;invoke.lisp&lt;/a&gt; which was the first extension to ASDF that could actuall dynamically add jar files to the hosting JVM process.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-406986359649992518?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/406986359649992518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/09/jvm-classpath-integration-maven-et-al.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/406986359649992518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/406986359649992518'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/09/jvm-classpath-integration-maven-et-al.html' title='JVM classpath integration (Maven et. al.)'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6186631110070195291</id><published>2011-08-25T07:43:00.001-07:00</published><updated>2011-08-25T08:20:22.869-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='compilation'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>Building SBCL with ABCL</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;But due to recent work, as of ABCL trunk &lt;a href="http://trac.common-lisp.net/armedbear/changeset/13538"&gt;r13538&lt;/a&gt; we've restored this capability, &lt;a href="http://trac.common-lisp.net/armedbear/ticket/124"&gt;once again making ABCL capable of bootstrapping an SBCL build&lt;/a&gt;.  This may prove handy for individuals who wish to port SBCL to new platforms where there is a JVM available.&lt;br /&gt;&lt;br /&gt;When we mentioned this on #lisp, we were asked how long it takes ABCL to build SBCL vs. SBCL building itself.&lt;br /&gt;&lt;br /&gt;ABCL building SBCL&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;//build started:  Thu Aug 25 15:12:30 CEST 2011&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//build finished: Thu Aug 25 16:49:30 CEST 2011&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;real	96m59.819s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;user	37m35.702s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sys	32m44.641s&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;SBCL building SBCL&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;//build started:  Thu Aug 25 16:51:34 CEST 2011&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//build finished: Thu Aug 25 17:07:47 CEST 2011&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;real	16m12.855s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;user	4m40.804s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sys	3m28.145s&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So, ABCL is roughly a factor of six slower building SBCL than SBCL itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6186631110070195291?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6186631110070195291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/08/building-sbcl-with-abcl.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6186631110070195291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6186631110070195291'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/08/building-sbcl-with-abcl.html' title='Building SBCL with ABCL'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-916533420081655714</id><published>2011-08-19T14:53:00.000-07:00</published><updated>2011-08-19T14:53:14.104-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compilation'/><category scheme='http://www.blogger.com/atom/ns#' term='fix'/><title type='text'>Fixed: cl-unicode compilation</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;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&amp;nbsp;successfully&amp;nbsp;be compiled using ABCL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-916533420081655714?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/916533420081655714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/08/fixed-cl-unicode-compilation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/916533420081655714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/916533420081655714'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/08/fixed-cl-unicode-compilation.html' title='Fixed: cl-unicode compilation'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-872445981257396926</id><published>2011-08-15T14:18:00.000-07:00</published><updated>2011-08-15T14:18:33.780-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='contributing'/><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='Trac'/><title type='text'>Log tickets and edit the wiki using your Gmail account</title><content type='html'>Today, I installed the module AuthOpenID for Trac on ABCL's hosting environment. You can now log in and contribute to the &lt;a href="http://trac.common-lisp.net/armedbear/wiki"&gt;wiki&lt;/a&gt; or &lt;a href="http://trac.common-lisp.net/armedbear/report/1"&gt;log your tickets&lt;/a&gt; without owning a common-lisp.net login!&lt;br /&gt;&lt;br /&gt;Happy contributing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-872445981257396926?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/872445981257396926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/08/log-tickets-and-edit-wiki-using-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/872445981257396926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/872445981257396926'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/08/log-tickets-and-edit-wiki-using-your.html' title='Log tickets and edit the wiki using your Gmail account'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-7477945864090965810</id><published>2011-08-15T01:06:00.000-07:00</published><updated>2011-08-15T01:06:35.305-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quicklisp'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ABCL 0.26.2 released</title><content type='html'>A new patch release is available for ABCL: &lt;a href="http://common-lisp.net/project/armedbear/"&gt;0.26.2&lt;/a&gt;. This release fixes an important regression on windows where ABCL couldn't load fasls with spaces in their filenames.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Additionally, the &lt;a href="http://trac.common-lisp.net/armedbear/ticket/141"&gt;SETF expander for APPLY is fixed&lt;/a&gt; to allow use with non-CL functions to support CL-CONTAINERS - another small step to support the most popular libraries in &lt;a href="http://www.quicklisp.org/"&gt;Quicklisp&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-7477945864090965810?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/7477945864090965810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/08/abcl-0262-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/7477945864090965810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/7477945864090965810'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/08/abcl-0262-released.html' title='ABCL 0.26.2 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-85861297107366108</id><published>2011-07-31T23:13:00.000-07:00</published><updated>2011-07-31T23:13:20.535-07:00</updated><title type='text'>ABCL runs on newly released Java 7</title><content type='html'>Co-developer Mark Evenson tried to compile ABCL on the &lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html"&gt;recently released Java 7&lt;/a&gt; today. The results are very good: compilation succeeds with the minor addition of a  &lt;a href="http://trac.common-lisp.net/armedbear/changeset/13428"&gt;patch to specify the Java source conformance&lt;/a&gt;, 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.&lt;br /&gt;&lt;br /&gt;Conclusion: ABCL works with Java 7.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-85861297107366108?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/85861297107366108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/07/abcl-runs-on-newly-released-java-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/85861297107366108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/85861297107366108'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/07/abcl-runs-on-newly-released-java-7.html' title='ABCL runs on newly released Java 7'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-5598225558388382583</id><published>2011-07-27T07:15:00.000-07:00</published><updated>2011-07-27T07:15:10.535-07:00</updated><title type='text'>ABCL 0.26.1 released</title><content type='html'>On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to&amp;nbsp;be able to announce the 0.26.1 release.&lt;br /&gt;&lt;br /&gt;ABCL is a Common Lisp implementation implemented in Java and running on the&amp;nbsp;JVM, featuring both an interpreter and a compiler. The compiler targets the&amp;nbsp;JVM directly meaning that its output is runnable JVM bytecode. The fact&amp;nbsp;that ABCL is written in Java allows for relatively easy embedding in larger&lt;br /&gt;applications. For integration with existing applications ABCL implements&amp;nbsp;JSR 223: Java scripting API.&lt;br /&gt;&lt;br /&gt;This release features - among lots of other things - a major reduction in&amp;nbsp;the number of failures in the ANSI test suite: dropping from 26 to 16 failures&amp;nbsp;on some systems (of 21699 tests in total). &amp;nbsp;Additionally, ABCL now runs&amp;nbsp;Hunchentoot and several other packages from the top downloads from Quicklisp. Please read the &lt;a href="http://common-lisp.net/project/armedbear/release-notes-0.26.shtml"&gt;release notes&lt;/a&gt; and the &lt;a href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES"&gt;CHANGES&lt;/a&gt; file for more.&amp;nbsp;Version 0.26.0 has not been released due to regressions fixed in this version.&lt;br /&gt;&lt;br /&gt;If you have questions regarding use or licensing, or you find issues, please&amp;nbsp;report back to the development list:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;armedbear-devel at common-lisp dot net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Source distribution archives can be downloaded in ZIP or gzipped tar form:&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.26.1/abcl-src-0.26.1.tar.gz"&gt;abcl-src-0.26.1.tar.gz&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.26.1/abcl-src-0.26.1.zip"&gt;abcl-src-0.26.1.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Signatures are available under:&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/0.26.1/releases/abcl-src-0.26.1.tar.gz.asc"&gt;abcl-src-0.26.1.tar.gz.asc&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/0.26.1/releases/abcl-src-0.26.1.zip.asc"&gt;abcl-src-0.26.1.zip.asc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In addition, binaries are also available:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.26.1/abcl-bin-0.26.1.tar.gz"&gt;abcl-bin-0.26.1.tar.gz&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.26.1/abcl-bin-0.26.1.zip"&gt;abcl-bin-0.26.1.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With associated signatures:&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.26.1.tar.gz.asc"&gt;abcl-bin-0.26.1.tar.gz.asc&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.26.1.zip.asc"&gt;abcl-bin-0.26.1.zip.asc&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-5598225558388382583?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/5598225558388382583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/07/abcl-0261-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5598225558388382583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5598225558388382583'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/07/abcl-0261-released.html' title='ABCL 0.26.1 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-4075048852948955537</id><published>2011-07-03T14:13:00.000-07:00</published><updated>2011-07-03T14:13:47.920-07:00</updated><title type='text'>Upcoming release (0.26)</title><content type='html'>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.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you have time to test the current trunk version of ABCL with your&amp;nbsp;favorite application, please do and submit your findings: hopefully we can fix them before the actual release!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This release contains the -very often wished for- improvement for deployment: compilation of ASDF systems into JAR files! And much more...&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-4075048852948955537?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/4075048852948955537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/07/upcoming-release-026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/4075048852948955537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/4075048852948955537'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/07/upcoming-release-026.html' title='Upcoming release (0.26)'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-5442340392626393438</id><published>2011-06-05T15:34:00.000-07:00</published><updated>2011-06-05T15:34:27.489-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='repository'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>Repository available over HTTP for anonymous checkout</title><content type='html'>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!&lt;br /&gt;To do so:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;svn co http://svn.common-lisp.net/armedbear/trunk abcl&lt;/span&gt;&lt;/blockquote&gt;&amp;nbsp;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-5442340392626393438?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/5442340392626393438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/06/repository-available-over-http-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5442340392626393438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5442340392626393438'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/06/repository-available-over-http-for.html' title='Repository available over HTTP for anonymous checkout'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-8899448904890188765</id><published>2011-03-17T14:49:00.000-07:00</published><updated>2011-03-17T14:49:09.279-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quicklisp'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>Quicklisp helps focus ABCL development</title><content type='html'>One of the great side effects from &lt;a href="http://quicklisp.org/"&gt;Quicklisp &lt;/a&gt;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 &lt;a href="http://xach.com/tmp/downloads.txt"&gt;system downloads&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;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 &lt;a href="http://trac.common-lisp.net/armedbear/ticket/135"&gt;fix bordeaux-threads&lt;/a&gt;&amp;nbsp;on ABCL. Ville Voutilainen implemented an &lt;a href="http://trac.common-lisp.net/armedbear/ticket/136"&gt;implementation-specific extension to DIRECTORY in order not to resolve symlinks&lt;/a&gt;&amp;nbsp;required by Quicklisp itself. While Erik Huelsmann has been working to implement &lt;a href="http://www.cliki.net/trivial-garbage"&gt;trivial-garbage&lt;/a&gt; required functionalities &lt;a href="http://trac.common-lisp.net/armedbear/ticket/139"&gt;weak references&lt;/a&gt;, &lt;a href="http://trac.common-lisp.net/armedbear/ticket/138"&gt;object finalizers&lt;/a&gt; and &lt;a href="http://trac.common-lisp.net/armedbear/ticket/140"&gt;weak hash tables&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-8899448904890188765?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/8899448904890188765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/03/quicklisp-helps-focus-abcl-development.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/8899448904890188765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/8899448904890188765'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/03/quicklisp-helps-focus-abcl-development.html' title='Quicklisp helps focus ABCL development'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-3906280383590732363</id><published>2011-03-10T13:11:00.000-08:00</published><updated>2011-03-11T13:47:55.421-08:00</updated><title type='text'>ABCL 0.25.0 released</title><content type='html'>On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to be able to announce the 0.25.0 release.&lt;br /&gt;&lt;br /&gt;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&lt;br /&gt;applications. For integration with existing applications ABCL implements JSR 223: Java scripting API.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;You can find the full release notes at:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://common-lisp.net/project/armedbear/release-notes-0.25.shtml"&gt;http://common-lisp.net/project/armedbear/release-notes-0.25.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and the list of changes at:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES"&gt;http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you have questions regarding use or licensing, or you find issues, please report back to the development list:&lt;br /&gt;&lt;br /&gt; armedbear-devel at common-lisp dot net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Source distribution archives can be downloaded in ZIP or gzipped tar form:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-src-0.25.0.tar.gz"&gt;http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-src-0.25.0.tar.gz&lt;/a&gt;&lt;br /&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-src-0.25.0.zip"&gt;http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-src-0.25.0.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Signatures are available under:&lt;br /&gt; &lt;a href="http://common-lisp.net/project/armedbear/0.25.0/releases/abcl-src-0.25.0.tar.gz.asc"&gt;http://common-lisp.net/project/armedbear/0.25.0/releases/abcl-src-0.25.0.tar.gz.asc&lt;/a&gt;&lt;br /&gt; &lt;a href="http://common-lisp.net/project/armedbear/0.25.0/releases/abcl-src-0.25.0.zip.asc"&gt;http://common-lisp.net/project/armedbear/0.25.0/releases/abcl-src-0.25.0.zip.asc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In addition, binaries are also available:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-bin-0.25.0.tar.gz"&gt;http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-bin-0.25.0.tar.gz&lt;/a&gt;&lt;br /&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-bin-0.25.0.zip"&gt;http://common-lisp.net/project/armedbear/releases/0.25.0/abcl-bin-0.25.0.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With associated signatures:&lt;br /&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.25.0.tar.gz.asc"&gt;http://common-lisp.net/project/armedbear/releases/abcl-bin-0.25.0.tar.gz.asc&lt;/a&gt;&lt;br /&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.25.0.zip.asc"&gt;http://common-lisp.net/project/armedbear/releases/abcl-bin-0.25.0.zip.asc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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: &lt;a href="http://trac.common-lisp.net/armedbear/wiki/MavenSupport" target="_blank"&gt;http://trac.common-lisp.net/&lt;wbr&gt;armedbear/wiki/MavenSupport&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-3906280383590732363?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/3906280383590732363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/03/abcl-0250-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3906280383590732363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3906280383590732363'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/03/abcl-0250-released.html' title='ABCL 0.25.0 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-4248974904414634794</id><published>2011-03-01T14:51:00.000-08:00</published><updated>2011-03-01T14:51:28.037-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quicklisp'/><category scheme='http://www.blogger.com/atom/ns#' term='bootstrapping'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>Bootstrapping Quicklisp on ABCL</title><content type='html'>The other day, I decided that - as many others have done before me - I'd give &lt;a href="http://quicklisp.org/"&gt;Quicklisp&lt;/a&gt; a go. Being on Windows (and &lt;a href="http://common-lisp.net/project/armedbear/"&gt;ABCL&lt;/a&gt;), I was expecting a bumpy ride.&lt;br /&gt;&lt;br /&gt;Turns out I was completely wrong: all I needed was a simple&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;CL-USER&amp;gt; &lt;b&gt;(load "http://beta.quicklisp.org/quicklisp.lisp") &amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;[!!]&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Quicklisp downloaded all its data nicely into my home directory (which - on ABCL/Win - is C:\Users\&lt;username&gt;, 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:&lt;/username&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;CL-USER&amp;gt; &lt;b&gt;(load "c:/users/erik/quicklisp/setup.lisp")&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's it. That's all. No bumpy ride. No ABCL issues. It Just Works!&lt;br /&gt;&lt;br /&gt;Thanks Zach!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[!!] &lt;span class="Apple-style-span" style="color: red;"&gt;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"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-4248974904414634794?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/4248974904414634794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/03/bootstrapping-quicklisp-on-abcl.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/4248974904414634794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/4248974904414634794'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/03/bootstrapping-quicklisp-on-abcl.html' title='Bootstrapping Quicklisp on ABCL'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6500999699137264831</id><published>2011-02-16T23:03:00.000-08:00</published><updated>2011-02-16T23:09:17.356-08:00</updated><title type='text'>Summer of the Bear</title><content type='html'>We're starting to coordinate [discussion of project that ABCL developers wish to mentor][1] for the Summer of the Bear 2011.  &lt;br /&gt;&lt;br /&gt;Drop by on IRC via  [#summeroflisp][] or [#abcl][] for ideas or feedback.&lt;br /&gt;&lt;br /&gt;[1]: &lt;a href="http://trac.common-lisp.net/armedbear/wiki/GSoC2011"&gt;http://trac.common-lisp.net/armedbear/wiki/GSoC2011&lt;/a&gt;&lt;br /&gt;[#summeroflisp]: &lt;a href="http://webchat.freenode.net/"&gt;http://webchat.freenode.net/&lt;/a&gt;&lt;br /&gt;[#abcl]: &lt;a href="http://webchat.freenode.net/"&gt;http://webchat.freenode.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6500999699137264831?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6500999699137264831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/02/summer-of-bear.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6500999699137264831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6500999699137264831'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/02/summer-of-bear.html' title='Summer of the Bear'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-4710218610705226145</id><published>2011-02-15T12:43:00.000-08:00</published><updated>2011-02-15T12:43:12.715-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='AMOP'/><category scheme='http://www.blogger.com/atom/ns#' term='CLOS'/><title type='text'>CLOS work on trunk</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;One of such longer standing issues was the performance of object instantiation. In the CLHS there's a &lt;a href="http://www.lispworks.com/documentation/lw51/CLHS/Body/07_ab.htm"&gt;specific section about the validity of initialization arguments (initargs)&lt;/a&gt; and which ones are to be considered valid. A number of improvements have been committed to trunk:&lt;br /&gt;1. The check has been&lt;a href="http://trac.common-lisp.net/armedbear/changeset/13207"&gt; generalized to support all four cases&lt;/a&gt; of that specific section of the CLHS.&lt;br /&gt;2. The checks done during object instantiation have been a performance bottleneck ever since they were implemented; as an improvement, &lt;a href="http://trac.common-lisp.net/armedbear/changeset/13219"&gt;a cache has been implemented&lt;/a&gt;, speeding up object instantiation significantly: the performance has been doubled (ie the same amount of time now allows creation of twice as many objects).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;On a completely different subject (within CLOS), we had an &lt;a href="http://trac.common-lisp.net/armedbear/ticket/83"&gt;issue where instantiation of an object depending on a forward referenced class caused evaluation to be aborted, without useful feedback&lt;/a&gt;. While fixing this issue could have been done quickly and completely unrelated to other changes, I decided to &lt;a href="http://trac.common-lisp.net/armedbear/changeset/13217"&gt;change the behaviour of some of the functions involved&lt;/a&gt; according to the &lt;a href="http://www.alu.org/mop/concepts.html#class-finalization-protocol"&gt;AMOP class finalization specification&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So we have taken some small steps on the long (and hard) road toward a performant CLOS/AMOP implementation on the JVM again!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-4710218610705226145?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/4710218610705226145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/02/clos-work-on-trunk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/4710218610705226145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/4710218610705226145'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/02/clos-work-on-trunk.html' title='CLOS work on trunk'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-9154785927007110282</id><published>2011-01-23T13:33:00.000-08:00</published><updated>2011-01-23T13:33:36.242-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stand alone'/><category scheme='http://www.blogger.com/atom/ns#' term='executable'/><category scheme='http://www.blogger.com/atom/ns#' term='standalone'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>ABCL stand alone (nearly) executables</title><content type='html'>Didier Verna describes his efforts to port CLON to ABCL to create stand alone (nearly) executables in his latest blog entry here:&amp;nbsp;&lt;a href="http://www.didierverna.com/sciblog/index.php?post/2011/01/22/Towards-ABCL-Standalone-Executables"&gt;http://www.didierverna.com/sciblog/index.php?post/2011/01/22/Towards-ABCL-Standalone-Executables&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-9154785927007110282?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/9154785927007110282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/01/abcl-stand-alone-nearly-executables.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/9154785927007110282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/9154785927007110282'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/01/abcl-stand-alone-nearly-executables.html' title='ABCL stand alone (nearly) executables'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6333593671603498730</id><published>2011-01-22T12:08:00.000-08:00</published><updated>2011-01-22T12:08:35.095-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>ABCL 0.24.0 released</title><content type='html'>This release features - among lots of other things - improved embedding support&amp;nbsp;through elimination of System.exit() calls and fixes a regression causing&amp;nbsp;FASLs to be limited in the number of functions they can contain.&lt;br /&gt;You can find the full release notes at:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/release-notes-0.24.shtml"&gt;http://common-lisp.net/project/armedbear/release-notes-0.24.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and the list of changes at:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES"&gt;http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you have questions regarding use or licensing, or you find issues, please&amp;nbsp;report back to the development list:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;armedbear-devel at common-lisp dot net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Source distribution archives can be downloaded in ZIP or gzipped tar form:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-src-0.24.0.tar.gz"&gt;http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-src-0.24.0.tar.gz&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-src-0.24.0.zip"&gt;http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-src-0.24.0.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Signatures are available under:&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/0.24.0/releases/abcl-src-0.24.0.tar.gz.asc"&gt;http://common-lisp.net/project/armedbear/0.24.0/releases/abcl-src-0.24.0.tar.gz.asc&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/0.24.0/releases/abcl-src-0.24.0.zip.asc"&gt;http://common-lisp.net/project/armedbear/0.24.0/releases/abcl-src-0.24.0.zip.asc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In addition, binaries are also available:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-bin-0.24.0.tar.gz"&gt;http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-bin-0.24.0.tar.gz&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-bin-0.24.0.zip"&gt;http://common-lisp.net/project/armedbear/releases/0.24.0/abcl-bin-0.24.0.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With associated signatures:&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.24.0.tar.gz.asc"&gt;http://common-lisp.net/project/armedbear/releases/abcl-bin-0.24.0.tar.gz.asc&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.24.0.zip.asc"&gt;http://common-lisp.net/project/armedbear/releases/abcl-bin-0.24.0.zip.asc&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6333593671603498730?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6333593671603498730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2011/01/abcl-0240-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6333593671603498730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6333593671603498730'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2011/01/abcl-0240-released.html' title='ABCL 0.24.0 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-2459523307164070215</id><published>2010-12-18T15:38:00.000-08:00</published><updated>2010-12-18T15:38:40.889-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='compilation'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>Integrating ABCL with Ant - the second step</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;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 &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;pathconvert&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;mapper&lt;/span&gt; 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 &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;apply&lt;/span&gt;) and the former converts its output to a string instead of a set of paths.&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(let* ((the-project (jcall "getProject" self))&lt;br /&gt;       (src-iterator (jcall (jmethod "org.apache.tools.ant.types.Path" "iterator")&lt;br /&gt;                            (jcall "getReference" the-project "lisp-files")))&lt;br /&gt;       (src-wildcard (pathname (format nil "~A**/*.lisp" (jcall "getProperty" the-project "build.src.dir"))))&lt;br /&gt;       (dst-wildcard (pathname (format nil "~A**/*.abcl" (jcall "getProperty" the-project "build.dst.dir")))))&lt;br /&gt;   (when (and (jcall "hasNext" src-iterator))&lt;br /&gt;     (loop&lt;br /&gt;        for src-path = (pathname (jcall (jmethod "java.lang.Object" "toString")&lt;br /&gt;                                 (jcall "next" src-iterator)))&lt;br /&gt;        for dst-path = (translate-pathname src-path src-wildcard dst-wildcard)&lt;br /&gt;        do (compile-file src-path :output-file dst-path)&lt;br /&gt;        while (and (jcall "hasNext" src-iterator)))))&lt;/pre&gt;&lt;br /&gt;It's based on 2 properties having been defined: "build.src.dir" and "build.dst.dir". In addition, it wants a set of paths (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;fileset&lt;/span&gt; or &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;path&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;In my NetBeans project settings, I had to exclude "**/*.lisp" from packaging in the destination JAR file.&lt;br /&gt;&lt;br /&gt;Now the JAR contains the fasl instead of the source file!&lt;br /&gt;&lt;br /&gt;Do you have useful or resourceful ABCL based scripts plugged into Ant? Let me know and post a reaction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-2459523307164070215?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/2459523307164070215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/12/integrating-abcl-with-ant-second-step.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2459523307164070215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2459523307164070215'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/12/integrating-abcl-with-ant-second-step.html' title='Integrating ABCL with Ant - the second step'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-2998968003749053412</id><published>2010-12-12T13:47:00.000-08:00</published><updated>2010-12-12T13:48:27.913-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='integration'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>Integrating ABCL with Ant</title><content type='html'>While working with ABCL embedded in Java applications, you typically have java and lisp source files. Whenever I'm in that situaition, I find that I want to be able to build all sources from the same build mechanism.&lt;br /&gt;&lt;br /&gt;Last week, Alex Mizrahi and I started to work on reviving &lt;a href="https://sourceforge.net/projects/abcl-web/"&gt;ABCL-web&lt;/a&gt; (a project to create Java Servlets backed by Common Lisp code running in ABCL). That's when I found myself in need of a solution to this problem again: the project would greatly benefit from having a way to build lisp files for inclusion in the resulting JAR file.&lt;br /&gt;&lt;br /&gt;Looking around, I found there are three options to achieve this goal:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a custom Ant task&lt;/li&gt;&lt;li&gt;Implement a command line switch to create fasls from the ABCL command line&lt;/li&gt;&lt;li&gt;Use our JSR-223 support to write in-line Lisp in build files&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;While option (1) looked very attractive at first, it means one of two things: (1) adding an additional dependency for creation of our jar for distribution, or (2) creation of a separate jar file with only this task in it. In all cases, it adds a dependency to our release build. Because our current release build doesn't require Ant (you can build our release using the lisp-based build), I wasn't ready to accept this solution yet.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Option (2) looked very attractive, because it would not only integrate with Ant, but with build systems in general. &amp;nbsp;This option became less attractive when I found that the standard Ant project doesn't have any helpers for iterating sets. The thing that I had been thinking about was to implement the basics first, ie working the way gcc is used in most projects: 1 invocation per source file. So, in order to support the scheme that Ant does allow, the parameters ABCL would have to support became a lot more complex, needing to support file-sets to be compiled.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then, I found the 'script' tag, which serves to integrate JSR-223 (Java scripting languages) into Ant build files. As we support JSR-223, I thought I'd give it a try! (So far I hadn't used it yet, I embed ABCL directly in my applications.) This solution -if it works out- is really great: no additional dependencies and no hacks [in our own build system, we feed the lisp that we want evaluated to ABCL through standard input.]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, I gave it a try and within minutes, I was in business! I'm using a NetBeans generated project, so there's a "-post-compile" target which gets invoked after the "compile" target completes succesfully.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;pre&gt;&amp;lt;target name="-post-compile" description="lisp file compilation"&amp;gt;&lt;br /&gt;&amp;lt;script language="ABCL" classpath="lib/abcl.jar"&amp;gt;&lt;br /&gt;&amp;lt;![CDATA[&lt;br /&gt;(let* ((the-project (jcall "getProject" self))&lt;br /&gt;       (the-fileset (jcall "getReference" the-project "lisp-files"))&lt;br /&gt;       (files-iterator&lt;br /&gt;        (jcall (jmethod "org.apache.tools.ant.types.Path"&lt;br /&gt;                        "iterator")&lt;br /&gt;               the-fileset)))&lt;br /&gt;   (loop while (jcall "hasNext" files-iterator)&lt;br /&gt;        do (print (jcall "next" files-iterator))))&lt;br /&gt;]]&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The snippet basically retrieves a path-set with the ID "lisp-files" defined elsewhere in the project file. Then, it continues to print all the (Java) objects it retrieves from the iterator. The next step is to replace the (print ...) form with a (compile-file ) form, retrieving the path string from the Path object and making a lisp pathname of it.&amp;nbsp;Want to signal failed build? Just do what a real Task implementation would have done: throw a BuildException.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Concluding: while adding command line options may still be a desirable path to pursue, Ant integration is here for anybody embedding ABCL in a broader Java context.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-2998968003749053412?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/2998968003749053412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/12/aaa.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2998968003749053412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2998968003749053412'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/12/aaa.html' title='Integrating ABCL with Ant'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-4460441545826102267</id><published>2010-12-02T04:18:00.000-08:00</published><updated>2010-12-02T04:35:36.279-08:00</updated><title type='text'>ABCL 0.23.1 released: fix for loading from path with spaces</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"&gt;The ABCL community released version 0.23.1 of its lisp-on-the-jvm. This release fixes the ability to run ABCL from paths with one or more spaces in them.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Source distribution archives can be downloaded in ZIP or gzipped tar form:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-src-0.23.1.tar.gz"&gt;http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-src-0.23.1.tar.gz&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-src-0.23.1.zip"&gt;http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-src-0.23.1.zip&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Signatures are available under:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-src-0.23.1.tar.gz.asc"&gt;http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-src-0.23.1.tar.gz.asc&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-src-0.23.1.zip.asc"&gt;http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-src-0.23.1.zip.asc&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;In addition, binaries are also available:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-bin-0.23.1.tar.gz"&gt;http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-bin-0.23.1.tar.gz&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-bin-0.23.1.zip"&gt;http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-bin-0.23.1.zip&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;With associated signatures:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-bin-0.23.1.tar.gz.asc"&gt;http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-bin-0.23.1.tar.gz.asc&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.blogger.com/goog_1208381615"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-bin-0.23.1.zip.asc"&gt;http://common-lisp.net/project/armedbear/releases/0.23.1/abcl-bin-0.23.1.zip.asc&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-4460441545826102267?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/4460441545826102267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/12/abcl-0230-released-fix-for-loading-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/4460441545826102267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/4460441545826102267'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/12/abcl-0230-released-fix-for-loading-from.html' title='ABCL 0.23.1 released: fix for loading from path with spaces'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6064564932496497191</id><published>2010-11-25T07:35:00.000-08:00</published><updated>2010-11-25T07:35:11.083-08:00</updated><title type='text'>ABCL 0.23.0 released</title><content type='html'>On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to&amp;nbsp;be able to announce the 0.23.0 release.&lt;br /&gt;&lt;br /&gt;ABCL is a Common Lisp implementation implemented in Java and running on the&amp;nbsp;JVM, featuring both an interpreter and a compiler. The compiler targets the&amp;nbsp;JVM directly meaning that its output is runnable JVM bytecode. The fact&amp;nbsp;that ABCL is written in Java allows for relatively easy embedding in larger&amp;nbsp;applications. For integration with existing applications ABCL implements&amp;nbsp;Java Specification Request (JSR) 223: Java scripting API.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This release features - among lots of other things - CLOS thread safety fixes and&amp;nbsp;concurrency improvements, support for Oracle's JRockit JVM, and a new&amp;nbsp;(generic) class file writer. In addition, this is the first release to complete the Maxima test suite without failures, thanks to close cooperation between our projects. You can find the full&amp;nbsp;release notes at:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/release-notes-0.23.shtml"&gt;http://common-lisp.net/project/armedbear/release-notes-0.23.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and the list of changes at:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES"&gt;http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you have questions regarding use or licensing, or you find issues, please&amp;nbsp;report back to the development list:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;armedbear-devel at common-lisp dot net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Source distribution archives can be downloaded in ZIP or gzipped tar form:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-src-0.23.0.tar.gz"&gt;http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-src-0.23.0.tar.gz&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-src-0.23.0.zip"&gt;http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-src-0.23.0.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Signatures are available under:&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-src-0.23.0.tar.gz.asc"&gt;http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-src-0.23.0.tar.gz.asc&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-src-0.23.0.zip.asc"&gt;http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-src-0.23.0.zip.asc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In addition, binaries are also available:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-bin-0.23.0.tar.gz"&gt;http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-bin-0.23.0.tar.gz&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-bin-0.23.0.zip"&gt;http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-bin-0.23.0.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With associated signatures:&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-bin-0.23.0.tar.gz.asc"&gt;http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-bin-0.23.0.tar.gz.asc&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-bin-0.23.0.zip.asc"&gt;http://common-lisp.net/project/armedbear/releases/0.23.0/abcl-bin-0.23.0.zip.asc&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6064564932496497191?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6064564932496497191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/11/abcl-0230-released.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6064564932496497191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6064564932496497191'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/11/abcl-0230-released.html' title='ABCL 0.23.0 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-1374088066305125798</id><published>2010-10-10T02:20:00.000-07:00</published><updated>2010-10-10T05:53:07.579-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='hash table'/><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><category scheme='http://www.blogger.com/atom/ns#' term='threading'/><category scheme='http://www.blogger.com/atom/ns#' term='CLOS'/><title type='text'>ABCL hash tables: threading and CLOS</title><content type='html'>More people are starting to use ABCL in threaded environments - I have been doing so myself since spring 2008. My own use revealed some threading issues in the compiler which have been long solved now.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Last April, David Kirkman mailed the list with some threading problems in our CLOS implementation. Because of other work - including implementation of METACLASS support -  there wasn't much time to do much about the issue.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This week, he mailed having found the problem - accompanied with a patch with a solution. Because of our need to support the four Common Lisp equality operators, ABCL implements its own hash tables -four of them - with a shared ancestor class which requires implementation of a few primitive operations. Hash access from the Lisp world was being synchronized by the common ancestor. However, in some locations on the Java side the - unsynchronized - primitives were being called directly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The solution was of course to add synchronization to the primitives as well. Evaluating the result, the new situation was rather unsatisfying: only a single thread could be reading or writing at the same time, meaning only a single CLOS effective method dispatch could be happening at the same time. You probably understand my reluctance to accept the status quo.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The quick solution to the CLOS dispatch problem was to use the java.util.concurrent.ConcurrentHashMap type: we were keying on symbols, which have EQ equility in the Java world (ie in terms of Object.equals()).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That still left the lisp world with rather unsatisfactory threading performance of our own hash tables and since those were repeating large chunks of code in their specialized primitives, I decided to refactor them completely.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The result is - admittedly by looking very closely at ConcurrentHashTable - a single hash table implementation with 4 Comparator classes, which have nearly-lockless reads from all threads. Inserts into the hash table are still synchronized from all threads, but that's expected to be a lesser problem: you'd primarily expect many reads per write in a hash table.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Concluding, the only (known) CLOS threading issue has been fixed - there are presumably many more, please report if you find them - and as a bonus we have a much more efficient hash table implementation.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-1374088066305125798?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/1374088066305125798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/10/abcl-hash-tables-threading-and-clos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/1374088066305125798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/1374088066305125798'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/10/abcl-hash-tables-threading-and-clos.html' title='ABCL hash tables: threading and CLOS'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-5335499602139878721</id><published>2010-10-03T00:25:00.000-07:00</published><updated>2010-10-03T01:22:53.376-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maxima'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>Maxima on ABCL: full pass on the test suite</title><content type='html'>Over the past two weeks Raymond Toy helped out to&lt;b&gt; &lt;/b&gt;fix the last 9 failures in the Maxima test suite running: &lt;b&gt;ABCL now passes the full 8.666 Maxima tests&lt;/b&gt;! We achieved a goal set for ABCL more than two years ago!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thinking back to the days when Peter Graves had just handed over the project shows just how far we have come: back in September 2008 lots of tests (423, according to Hunter Monroe) would plainly terminate the test suite. That number had come down from over 1000 tests crashing the test suite in January of that year.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After manually disabling the crashing tests, Hunter Monroe writes on September 27 (2008) that he's been able to complete the tests with a total number of failures of 612 (out of 4454 tests) .&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Many of the problems were caused by incorrect handling of special variables which was one of the first things to be addressed in ABCL - stabilizing over the first half of 2009. Other improvements which contributed to the stability of Maxima were fixes to the code generating non-local returns (THROW, GOTO stepping out of a closure, RETURN-FROM stepping out of a closure). Next to its reduction in specials, the Maxima team had to change lots of number comparisons from EQ to EQL, because in ABCL integers aren't (guaranteed) to be EQ - which is allowed by the spec, but not very customary in CL implementations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At the same time evaluation time of the test suite has gone down considerably too - not due to increased processing power, but due to improvements on both sides. One example of an improvement which has greatly benefitted ABCL's performance is the gradual elimination of specials is Maxima - an on-going effort in their team. On the other side, binding and unwinding specials has become much faster in ABCL too, reducing the impact of remaining excessive specials.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The last few tests to be fixed required adjustments to the Maxima test suite as well as fixes to ABCL. Thanks to everybody who helped achieve this result, most notably Robert Dodier, Hunter Monroe and Raymond Toy from the Maxima team as well as Ville Voutilainen and Mark Evenson from the ABCL team.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-5335499602139878721?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/5335499602139878721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/10/maxima-on-abcl-full-pass-on-test-suite.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5335499602139878721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5335499602139878721'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/10/maxima-on-abcl-full-pass-on-test-suite.html' title='Maxima on ABCL: full pass on the test suite'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-2863733013840229914</id><published>2010-09-26T11:03:00.000-07:00</published><updated>2010-09-26T11:17:54.626-07:00</updated><title type='text'>ABCL 0.22.0 released</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: 'lucida grande'; font-size: 13px; border-collapse: collapse; color: rgb(51, 51, 51); line-height: 18px; "&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to be able to announce the 0.22.0 release.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;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 Java Specification Request (JSR) 223: Java scripting API.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The release is a small maintenance release: most efforts were focussed on work happening on branches some of which has already been merged to trunk for 0.23.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;The release notes can be viewed at &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;a href="http://common-lisp.net/project/armedbear/release-notes-0.22.shtml" style="color: rgb(34, 51, 68); "&gt;http://common-lisp.net/project/armedbear/release-notes-0.22.shtml&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; "&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;and the list of changes at &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;a href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES" style="color: rgb(68, 85, 102); "&gt;http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Latest and older binary and source distributions can be downloaded from &lt;/span&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/" style="color: rgb(68, 85, 102); "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;http://common-lisp.net/project/armedbear/releases/&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-2863733013840229914?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/2863733013840229914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/09/abcl-0220-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2863733013840229914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2863733013840229914'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/09/abcl-0220-released.html' title='ABCL 0.22.0 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6454976864990507319</id><published>2010-09-19T14:07:00.001-07:00</published><updated>2010-09-23T12:11:05.557-07:00</updated><title type='text'>Parsing latin1 data with an utf-8 stream</title><content type='html'>We recently noticed that ABCL isn't capable of reading files containing certain latin1 characters, like the author comments in &lt;a href=http://albert.sourceforge.net&gt;albert&lt;/a&gt;. ABCL's DecodingReader uses java.nio.charset.CharsetDecoder, which defaults to throwing exceptions when it finds unmappable character or input it otherwise considers malformed. Therefore, reading albert files, which contain Norwegian/Danish o-slashes resulted in an exception being thrown. Same result occurred with files that contain o-umlauts.&lt;br /&gt;&lt;br /&gt;The remedy that seemed obvious was changing the CharsetDecoder's error handling strategy to replace malformed input and unmappable characters. Alas, this didn't work, to much surprise, as it resulted in the DecodingReader to loop endlessly. Despite &lt;a href=http://www.rfc-editor.org/rfc/rfc3629.txt&gt;this document&lt;/a&gt;, which seems to suggest that an utf-8 byte sequence can only start with f0-f4, it seemed that o-umlaut (f6) and o-slash (f8) threw the decoder off-balance.&lt;br /&gt;&lt;br /&gt;After debugging the problem, we noticed that in the case of these characters, the DecodingReader reported an overflow but didn't advance the buffers it uses. So, after some consideration, we introduced a hack where, in case of an overflow that didn't advance the buffers at all, we advance the buffers manually by one byte and insert a ? character into the resulting stream. This reeks of a hack, but so far we haven't been able to find a more elegant solution. This solution does seem to enable us to parse files with such latin1 chars like o-umlaut and o-slash properly, and the fix was committed into ABCL trunk as commit r12902, and will be part of ABCL 0.22.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6454976864990507319?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6454976864990507319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/09/parsing-latin1-data-with-utf-8-stream.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6454976864990507319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6454976864990507319'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/09/parsing-latin1-data-with-utf-8-stream.html' title='Parsing latin1 data with an utf-8 stream'/><author><name>Ville Voutilainen</name><uri>http://www.blogger.com/profile/01174754356933985887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-3018216854699495146</id><published>2010-08-01T23:09:00.000-07:00</published><updated>2010-09-23T14:25:21.371-07:00</updated><title type='text'>ABCL-0.21.0 released....</title><content type='html'>.... so long ago that it's time to release 0.22 in the week(s) to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-3018216854699495146?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/3018216854699495146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/08/abcl-0210-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3018216854699495146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3018216854699495146'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/08/abcl-0210-released.html' title='ABCL-0.21.0 released....'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6104077925537574503</id><published>2010-07-11T13:32:00.000-07:00</published><updated>2010-07-12T23:55:30.712-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='url'/><category scheme='http://www.blogger.com/atom/ns#' term='pathname'/><category scheme='http://www.blogger.com/atom/ns#' term='uri'/><title type='text'>URI Pathnames</title><content type='html'>Among other goodies, ABCL-0.20 includes good support for using URI resources as arguments to about any function you would specify a filepath.  Any builtin scheme like "&lt;span style="font-family:courier new;"&gt;http&lt;/span&gt;" or "&lt;span style="font-family:courier new;"&gt;file&lt;/span&gt;" or "jar" works as a full-on Lisp &lt;span style="font-family:courier new;"&gt;Pathname&lt;/span&gt;, with the caveat that one may not write to an associated &lt;span style="font-family:courier new;"&gt;Stream&lt;/span&gt;.  We should be generic enough in implementation that the JVM extension mechanism for extending the classloader works for us for the most common use case, OSGi.&lt;br /&gt;&lt;br /&gt;We pick up the ability to refer to URI, associating an input &lt;span style="font-family:courier new;"&gt;Stream&lt;/span&gt; with its representation as a network (or local system) bytes easily as the following one-liner:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;CL-USER&gt; (with-open-file (stream #p"http://google.com/index.html")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           (format nil "~A" (read-line stream nil)))&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Underneath we have implemented a new subtype of PATHNAME, namely the type &gt;URL-PATHNAME.  We name this URL as opposed to URI as the underlying Java object is a java.net.URL with associated java.net.URLConnection that we'll be relying on for input sources.&lt;br /&gt;&lt;br /&gt;Looking through an APROPOS for URL-PATHNAME shows the following related symbols:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span courier=""  style="font-family:courier new;"&gt;CL-USER&gt; (apropos (type-of #p"http://google.com/index.html"))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;EXTENSIONS::SET-URL-PATHNAME-SCHEME (fbound)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;EXTENSIONS::SET-URL-PATHNAME-AUTHORITY (fbound)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;EXTENSIONS::SET-URL-PATHNAME-QUERY (fbound)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;EXTENSIONS::SET-URL-PATHNAME-FRAGMENT (fbound)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;URL-PATHNAME&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;URL-PATHNAME-AUTHORITY (fbound)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;URL-PATHNAME-SCHEME (fbound)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;URL-PATHNAME-FRAGMENT (fbound)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;URL-PATHNAME-QUERY (fbound)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;; No value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;CL-USER&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;which we see the defined functions to set the AUTHORITY, SCHEME, FRAGMENT, and QUERY portions of a URL-PATHNAME.&lt;br /&gt;&lt;br /&gt;After these modifications, the ABCL PATHNAME class now has two "beyond ANSI" subtypes, namely URL-PATHNAME and JAR-PATHNAME. A short document outlining the design of URL-PATHNAME can be found in &lt;a style="font-family: georgia;" href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/doc/design/pathnames/url-pathnames.markdown"&gt;our documentation directory&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In implementing URL-PATHNAME, we actually had the ability to analyze what another CL did for their implementation.  We analyzed the &lt;a href="http://clforjava.org/"&gt;CLForJava&lt;/a&gt; &lt;a href="http://clforjava.org/Documents/ELS%202008%20-%20Abstraction%20of%20Pathnames%20and%20Streams.pdf"&gt; technical paper&lt;/a&gt;, but decided not to use their abstractions as detailed  on a lengthy &lt;a href="http://article.gmane.org/gmane.lisp.armedbear.devel/993/"&gt;armedbear-devel&lt;/a&gt; post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6104077925537574503?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6104077925537574503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/07/uri-pathnames.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6104077925537574503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6104077925537574503'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/07/uri-pathnames.html' title='URI Pathnames'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6892303127553814328</id><published>2010-05-27T12:53:00.000-07:00</published><updated>2010-05-27T13:01:10.481-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>ABCL 0.20.0 released, including first funded feature</title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:'lucida grande';"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;div&gt;On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to be able to announce the 0.20.0 release.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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 Java Specification Request (JSR) 223: Java scripting API.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This release is the first to include a funded feature: funds were provided to implement the CLOS METACLASS feature and tests. Next to that, this release contains a large number of fixes and improvements, such&lt;/div&gt;&lt;div&gt;as the ability to use JARs and URLs as pathnames and the a new ASDF version (ASDF2). You can find the full release notes at:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  &lt;a href="http://common-lisp.net/project/armedbear/release-notes-0.20.shtml"&gt;http://common-lisp.net/project/armedbear/release-notes-0.20.shtml&lt;/a&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;and the list of changes at:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES"&gt;http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Latest and older binary and source distributions can be downloaded from&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/"&gt;http://common-lisp.net/project/armedbear/releases/&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6892303127553814328?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6892303127553814328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/05/abcl-0200-released-including-first.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6892303127553814328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6892303127553814328'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/05/abcl-0200-released-including-first.html' title='ABCL 0.20.0 released, including first funded feature'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-3845101615473253740</id><published>2010-05-06T04:04:00.000-07:00</published><updated>2010-05-06T13:51:09.098-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='slime'/><category scheme='http://www.blogger.com/atom/ns#' term='Lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>Running SLIME under cygwin with ABCL</title><content type='html'>If ABCL may be said to have an IDE, it has one in the combination of Emacs using the &lt;a href="http://common-lisp.net/project/slime/"&gt;SLIME&lt;/a&gt; to connect to running Lisp instance(s).  In the parlance of SLIME, Emacs is said to be the superior process with the running Lisp instance(s) known as the inferior Lisp process.   With SLIME, Emacs provides symbol completion in a REPL with edit history, Lisp syntax highlighting, finding the source location for a given form, the ability to run multiple instances of the inferior Lisp (or even different versions of Lisps), the ability to interactively inspect Lisp values, a nice wrapper for controlling ASDF, and much more.&lt;br /&gt;&lt;br /&gt;When confronted with a Microsoft Windows environment that I need to productively produce code in, the first thing I do is install the &lt;a href="http://www.cygwin.com/"&gt;cygwin&lt;/a&gt; package to get to a minimal UNIX-like environment.  Unlike many Windows enhancements, the installation of cygwin does not require Administrator privileges so it is possible even in a somewhat restricted corporate environment.  cygwin provides a UNIX compatibility layer that has enabled the porting of many standard GNU utilities to run under Windows, including an X11 server.&lt;br /&gt;&lt;br /&gt;One of the first packages that I install for use under cygwin is the Emacs X11 package, which provides The One True editor with a lot of tools that make simple programmatic tasks easy, and the construction of complicated system possible.  Historically there have been other efforts to bring Emacs to Windows such as NTEmacs, but now that GNU Emacs 23.1 runs fine in an X11 server with cygwin, I think the ease by which cygwin installs and updates outweighs putative advantages of Windows-specific Emacs ports.  In truth, over time, GNU Emacs has absorbed most of the useful features pioneered by other, more native, versions.&lt;br /&gt;&lt;br /&gt;People have reported that they have been able to get SLIME working with Emacs under Windows, but I never had much success, maybe because cygwin imposes a UNIX-like pathname structure that are naturally quite different from Windows pathnames.  Not only is the '\' &lt;--&gt; '/' convention switch, Windows drive letters (like '&lt;span style="font-family:courier new;"&gt;C:&lt;/span&gt;') are mapped to mounts unto the UNIX-like root filesystem, so '&lt;span style="font-family:courier new;"&gt;C:\&lt;/span&gt;' becomes '&lt;span style="font-family:courier new;"&gt;/cygdrive/c&lt;/span&gt;'.  Since ABCL under Windows runs on the JVM it expects to be dealing with Windows pathnames, it never worked for me.  Until today.  Or rather, yesterday.  So, without further ado about pathnames, here's …&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HOWTO install SLIME under Windows for ABCL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;0. &lt;a href="http://www.cygwin.com/setup.exe"&gt; Install cygwin&lt;/a&gt;, selecting the 'emacs-x11' and 'cvs' packages in the interactive chooser.&lt;br /&gt;&lt;br /&gt;1.  Make a directory called '&lt;span style="font-family:courier new;"&gt;c:\work&lt;/span&gt;' to contain ABCL and SLIME.  You can of course use whatever directory you wish here, but the adjust the rest of these instructions to whatever you choose.  Under cygwin, this directory will appear as '&lt;span style="font-family:courier new;"&gt;/cygdrive/c/work&lt;/span&gt;'.&lt;br /&gt;&lt;br /&gt;2. &lt;a href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/README"&gt; Install ABCL&lt;/a&gt; under '&lt;span style="font-family:courier new;"&gt;c:\work\abc&lt;/span&gt;l', so that '&lt;span style="font-family:courier new;"&gt;c:\work\abcl\abcl.ba&lt;/span&gt;t' invokes ABCL.&lt;br /&gt;&lt;br /&gt;3.  Use CVS to retrieve a copy of SLIME HEAD later than 2010-05-05.  SLIME doesn't do releases which put me off for a bit at first, so even though there is a slime-2.0 floating around somewhere, it's ancient by this time, and a release process probably won't be repeated by the SLIME community in the foreseeable future.&lt;br /&gt;&lt;br /&gt;From the bash prompt you installed in step 0, from the &lt;span style="font-family:courier new;"&gt;/cygdrive/c/work&lt;/span&gt; directory issue the following command:&lt;br /&gt;&lt;pre&gt;cmd$ cvs -d  :pserver:anonymous:anonymous@common-lisp.net:/project/slime/cvsroot checkout slime&lt;br /&gt;&lt;/pre&gt;This will checkout a copy of SLIME &lt;a href="http://common-lisp.net/project/slime/doc/slime.pdf"&gt;including documentation&lt;/a&gt;.  Alternatively one may download a &lt;a href="http://common-lisp.net/project/slime/snapshots/slime-current.tgz"&gt;CVS snapshot&lt;/a&gt; but then it will be harder to update SLIME later if you wish.&lt;br /&gt;&lt;br /&gt;4.  Use Emacs to edit '&lt;span style="font-family:courier new;"&gt;~/.emacs&lt;/span&gt;' to contain the following code&lt;br /&gt;&lt;pre&gt;;;; .emacs for SLIME working with cygwin emacs&lt;br /&gt;&lt;br /&gt;(add-to-list 'load-path "/cygdrive/c/work/slime")&lt;br /&gt;(setq slime-lisp-implementations&lt;br /&gt; '((abcl ("/cygdrive/c/work/abcl/abcl.bat"))))&lt;br /&gt;(require 'slime)&lt;br /&gt;(slime-setup '(slime-repl slime-asdf slime-fancy slime-banner))&lt;br /&gt;&lt;br /&gt;(defun slime-to-lisp-translation (filename)&lt;br /&gt;(replace-regexp-in-string&lt;br /&gt;"\n" "" (shell-command-to-string&lt;br /&gt;  (format "cygpath.exe --windows %s" filename))))&lt;br /&gt;&lt;br /&gt;(defun lisp-to-slime-translation (filename)&lt;br /&gt;(replace-regexp-in-string&lt;br /&gt;"\n" "" (shell-command-to-string&lt;br /&gt;  (format "cygpath.exe --unix %s filename"))))&lt;br /&gt;&lt;br /&gt;(setq slime-to-lisp-filename-function #'slime-to-lisp-translation)&lt;br /&gt;(setq lisp-to-slime-filename-function #'lisp-to-slime-translation)&lt;br /&gt;&lt;/pre&gt;This code sets up SLIME to be autoloaded by Emacs, using the '&lt;span style="font-family:courier new;"&gt;cygpath.exe&lt;/span&gt;' to translate pathnames between the cygwin UNIX conventions (which Emacs expects), and the native conventions (which ABCL running on the JVM expects).&lt;br /&gt;&lt;br /&gt;5.  Upon evaluating the elisp code which you just used to configure SLIME (which can be affected by restarting Emacs), SLIME can be invoked via "&lt;span style="font-family:courier new;"&gt;M-x slime&lt;/span&gt;".  ABCL will be invoked as a separate process, it will compile the elisp server known as swank that communicates between Emacs and the inferior Lisp process, it will load that code to initiate a connection, you'll see some "flying letters" coalesce into a REPL with a message in the mini-buffer welcoming you to SLIME&lt;br /&gt;&lt;br /&gt;Happy hacking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-3845101615473253740?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/3845101615473253740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/05/running-slime-under-cygwin-with-abcl.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3845101615473253740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3845101615473253740'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/05/running-slime-under-cygwin-with-abcl.html' title='Running SLIME under cygwin with ABCL'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6991526461112816818</id><published>2010-04-26T14:11:00.000-07:00</published><updated>2010-04-26T14:26:29.608-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='Nokia'/><category scheme='http://www.blogger.com/atom/ns#' term='N900'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>ABCL on N900</title><content type='html'>I decided to play a bit with my new mobile toy. The Nokia N900 should be capable of all kinds of things, including running a Java VM. After some googling, I found this page:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.maemo.org/OpenJDK_6.0_0_%28Cambridge_Software_Labs%29_on_N900"&gt;http://wiki.maemo.org/OpenJDK_6.0_0_%28Cambridge_Software_Labs%29_on_N900&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The instructions there seemed simple and straightforward, so I did as advised, downloaded the jdk package and extracted it onto the device, and then just copied abcl.jar over and ran it with the incantation that's usually found in the abcl wrapper script. The results are pretty good:&lt;br /&gt;&lt;br /&gt;~ $ /opt/OpenJDK-camswl/bin/java -cp /home/user/abcl.jar org.armedbear.lisp.Main&lt;br /&gt;Armed Bear Common Lisp 0.20.0-dev&lt;br /&gt;Java 1.6.0_0 Sun Microsystems Inc.&lt;br /&gt;OpenJDK Zero VM&lt;br /&gt;Low-level initialization completed in 4.436 seconds.&lt;br /&gt;Startup completed in 16.765 seconds.&lt;br /&gt;Type ":help" for a list of available commands.&lt;br /&gt;CL-USER(1): (format t "abcl rules!")&lt;br /&gt;abcl rules!&lt;br /&gt;NIL&lt;br /&gt;CL-USER(2):&lt;br /&gt;&lt;br /&gt;It runs obviously much slower than on any desktop, the device is not as powerful, and its i/o is slower which hurts autoloading. But it runs, and it is much easier to setup than java ever was on N800 and such, and it also runs much faster than the non-zero VMs on N800 did.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6991526461112816818?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6991526461112816818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/04/abcl-on-n900.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6991526461112816818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6991526461112816818'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/04/abcl-on-n900.html' title='ABCL on N900'/><author><name>Ville Voutilainen</name><uri>http://www.blogger.com/profile/01174754356933985887</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-5717244714630082312</id><published>2010-04-24T07:55:00.000-07:00</published><updated>2010-04-24T08:01:08.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><category scheme='http://www.blogger.com/atom/ns#' term='conformance'/><title type='text'>CGOL on ABCL</title><content type='html'>The other day I received an e-mail from an ABCL user, containing the following:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "&gt;I took a brief look at &lt;a href="http://en.wikipedia.org/wiki/CGOL"&gt;cgol&lt;/a&gt;.  Neat!  Interestingly, I tried it in&lt;br /&gt;clisp, sbcl, ecl, cmulisp, and abcl, and it only works in abcl!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial, sans-serif;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial, sans-serif;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;For those wanting to play with CGOL too, it's available from the &lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium; "&gt;&lt;b&gt;&lt;a href="http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/code/syntax/cgol/0.html"&gt;CMU Artificial Intelligence Repository&lt;/a&gt;.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Seems like ABCL is Common Lisp conformant enough to be able to run some of the older lisp code available: this source stems from 1993 and is unchanged since - judging by the timestamps in the download archive.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-5717244714630082312?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/5717244714630082312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/04/cgol-on-abcl.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5717244714630082312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5717244714630082312'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/04/cgol-on-abcl.html' title='CGOL on ABCL'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-2077393625848330007</id><published>2010-04-03T03:36:00.000-07:00</published><updated>2010-04-03T22:54:02.048-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><category scheme='http://www.blogger.com/atom/ns#' term='memory'/><category scheme='http://www.blogger.com/atom/ns#' term='condition'/><category scheme='http://www.blogger.com/atom/ns#' term='stack'/><title type='text'>Even better handling of low memory conditions</title><content type='html'>In previous research, ABCL came out nicely when tested for handling of Stack Overflow (SO) and Out Of Memory (OOM) conditions. See the blog item &lt;a href="http://blo.udoidio.info/2008/10/out-of-memory-sad-case.html"&gt;"out-of-memory: a sad case"&lt;/a&gt;; ABCL was classified as one of the few lisps that handled OOM conditions at all, by ending in the Lisp debugger even.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By looking more closely - which we did before the release of 0.18 - it turned out that handling of these conditions was only part of forms executed from REPL. If the same conditions occurred during program execution, the program was simply terminated, just like the other Lisps in the survey.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, when you have a program running into low memory conditions regularly, it makes sense to make more memory available to it at startup. There are a few &lt;a href="http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html#options"&gt;startup switches for java&lt;/a&gt; which allow to set the initial memory amount, most notably:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;-Xmx&lt;number&gt;: which sets the maximum amount of heap available&lt;br /&gt;examples: 512m, 1024k, 13m&lt;/number&gt;&lt;/li&gt;&lt;li&gt;-Xms&lt;number&gt;: like -Xmx but specifies the initial amount&lt;/number&gt;&lt;/li&gt;&lt;li&gt;-Xss&lt;number&gt;: specifies the thread stack size&lt;/number&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;These options are only available at startup though. These options can be added to ABCL's startup wrapper script, either after building, or by letting the build add them automatically. If you opt for the latter, you need to add a line like the following to your &lt;span style="font-family: courier new;"&gt;abcl&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span style="font-family: courier new;"&gt;.&lt;/span&gt;properties&lt;/span&gt; file (before abcl-0.19.1 this was named &lt;span style="font-family: courier new;font-size:100%;" &gt;build.properties&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;java.options=-Xmx512m -Xss6m&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If your program keeps large caches, it may be important to be able to detect OOM conditions, clear some or all of the caches and retry the operation. Other situations where it's good to be able to handle OOM conditions can be thought of. That's why it's important to have your programming environment help you detect these situations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the advantages of running in the JVM is that ABCL itself doesn't doesn't need heuristics to detect these situations: the JVM throws a StackOverflowError or an OutOfMemoryError as appropiate. The only thing ABCL needs to do is handle these errors in appropriate situations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Starting with 0.18, ABCL has well defined points where it traps the SO and OOM conditions in any Lisp program: HANDLER-BIND (and as a consequence HANDLER-CASE) establishes a try/catch block around the form. This try/catch block makes sure OOM and SO get converted to Lisp errors, for HANDLER-BIND to handle.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The situation isn't perfect: wouldn't it be nice to have a 'low memory' signal which provided an environment with enough memory to allow user-lisp code to run, for example to free up memory held by caches. Even though it's not perfect, ABCL now provides the functionalities which the "sad case" article would lead you to believe it already did.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An option to pursue low memory condition notifications was pointed out by Douglas Miles, one of the people frequenting the #abcl irc channel on freenode.net, would be to install handlers for the JMX (java management extensions) low memory notifications.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-2077393625848330007?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/2077393625848330007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/04/even-better-handling-of-low-memory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2077393625848330007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2077393625848330007'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/04/even-better-handling-of-low-memory.html' title='Even better handling of low memory conditions'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-1580894103297681047</id><published>2010-03-27T12:29:00.000-07:00</published><updated>2010-03-28T12:26:30.422-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>ABCL 0.19.1 released</title><content type='html'>&lt;div&gt;On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to be able to announce the 0.19.1 release. Version 0.19.0 was never released.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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 Java Specification Request (JSR) 223: Java scripting API.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This release features - among lots of other things - a fix for unbinding PROGV bound variables upon exiting the PROGV scope and a much improved integration of access to filenames specified by URLs. You can find the full release notes at:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="http://common-lisp.net/project/armedbear/release-notes-0.19.shtml"&gt;http://common-lisp.net/project/armedbear/release-notes-0.19.shtml&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and the list of changes at:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES"&gt;http://trac.common-lisp.net/armedbear/browser/trunk/abcl/CHANGES&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you have questions regarding use or licensing, or you find issues, please report back to the development list:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; armedbear-devel at common-lisp dot net&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Source distribution archives can be downloaded in ZIP or gzipped tar form:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.19.1.tar.gz"&gt;http://common-lisp.net/project/armedbear/releases/abcl-src-0.19.1.tar.gz&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.19.1.zip"&gt;http://common-lisp.net/project/armedbear/releases/abcl-src-0.19.1.zip&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Signatures are available under:&lt;/div&gt;&lt;div&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.19.1.tar.gz.asc"&gt;http://common-lisp.net/project/armedbear/releases/abcl-src-0.19.1.tar.gz.asc&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.19.1.zip.asc"&gt;http://common-lisp.net/project/armedbear/releases/abcl-src-0.19.1.zip.asc&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In addition, binaries are also available:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.19.1.tar.gz"&gt;http://common-lisp.net/project/armedbear/releases/abcl-bin-0.19.1.tar.gz&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.19.1.zip"&gt;http://common-lisp.net/project/armedbear/releases/abcl-bin-0.19.1.zip&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With associated signatures:&lt;/div&gt;&lt;div&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.19.1.tar.gz.asc"&gt;http://common-lisp.net/project/armedbear/releases/abcl-bin-0.19.1.tar.gz.asc&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.19.1.zip.asc"&gt;http://common-lisp.net/project/armedbear/releases/abcl-bin-0.19.1.zip.asc&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-1580894103297681047?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/1580894103297681047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/03/abcl-0191-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/1580894103297681047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/1580894103297681047'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/03/abcl-0191-released.html' title='ABCL 0.19.1 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-4107643663753660607</id><published>2010-02-11T04:36:00.000-08:00</published><updated>2010-02-11T05:52:18.657-08:00</updated><title type='text'>REQUIRE now works with ASDF systems</title><content type='html'>The ANSI *&lt;a href="http://www.lispworks.com/documentation/HyperSpec/Body/f_provid.htm"&gt;MODULES*/REQUIRE/PROVIDE &lt;/a&gt;interface is usually implemented in a fairly simple manner.   When a piece of code wishes to depend on functionality of a given module, a statement of the form&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;  &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  (require :module)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;first looks for whether the modules is currently in the list referenced by *MODULES*.  If this isn't the case, a Lisp implementation simply looks in a few standard places for a file to load based on the STRING form of  ":module", like "module.lisp", or possibly by a FASL.  That file is then loaded, during which the form&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;  &lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;(provide :module)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;is evaluated which pushes the keyword form of its argument to the *MODULES* list.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This very simple dependency mechanism really doesn't provide a mechanism for searching file hierarchies, being more appropriate to manage dependencies in a large collection of files located in a single directory as is the case in the ABCL system directory.   Presumably this simplicity and lack of extensibility led to the facility as being noted as deprecated in the HyperSpec.  But it is part of the ANSI standard so until the New Implementation of Lisp is released, it forms the only mechanism that portable code can rely on.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the contemporary Lisp era, &lt;a href="http://www.cliki.net/asdf"&gt;ASDF&lt;/a&gt; forms the most common method to specify system dependencies.  Since ANSI doesn't specify how REQUIRE searches for the dependencies, the clever folks behind SBCL decided to make REQUIRE invoke ASDF if the dependency cannot be resolved by the simple version of the mechanism.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since implementation is the sincerest form of flattery, as of &lt;a href="http://trac.common-lisp.net/armedbear/changeset/12447"&gt;ABCL svn r12247&lt;/a&gt; we have adopted this extension to REQUIRE.   To use this mechanism, you first have to ensure that ASDF itself is loaded via&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;   &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; (require 'asdf)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Afterwards, a command like &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  (require :hunchentoot)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;will search for an ASDF loadable system named "hunchentoot".  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But how does ASDF find these systems?  By successively searching the contents of ASDF:*CENTRAL-REGISTRY* which is a list of locations to search for files or symbolic links named "hunchentoot.asd".  Since maintaining this list for a large number of ASDF definitions would be onerous, the usual practice is to have a single directory which contains symbolic links to the system definitions.  It makes maintaining various versions a bit easier as one can simply manipulate the symbolic links.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I use the following piece of code in my "~/.abclrc" to collect all my ASDF pointers in the directory "~/.sbcl/systems/":&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;(require 'asdf)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;(pushnew '(merge-pathnames ".sbcl/systems/" (user-homedir-pathname))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;      asdf:*central-registry*)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;How does one install ASDF systems?  One downloads the code and creates a link to its "*.asd" file in "~/.sbcl/systems/".  But that can get onerous to do manually especially if one ASDF system depends on other systems.  The ASDF-INSTALL package provides a semi-interactive automated mechanism to download, compile, and install ASDF definitions.  For now, using SBCL to install ASDF systems that ABCL can share works pretty well, but we're currently working on incorporating a port of ASDF-INSTALL into the base ABCL system.  Stay tuned!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-4107643663753660607?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/4107643663753660607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/02/require-now-works-with-asdf-systems.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/4107643663753660607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/4107643663753660607'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/02/require-now-works-with-asdf-systems.html' title='REQUIRE now works with ASDF systems'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-3139304777619540537</id><published>2010-01-18T11:44:00.000-08:00</published><updated>2010-01-18T11:47:54.814-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ABCL 0.18.1 released</title><content type='html'>Due to some unfortunate regressions in 0.18.0, the ABCL project had to release an 0.18.1 release. It's readily available for download and is strongly advised for everybody who's now running 0.18.0: the .0 release can behave seemingly randomly after loading compiled code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-3139304777619540537?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/3139304777619540537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/01/abcl-0181-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3139304777619540537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3139304777619540537'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/01/abcl-0181-released.html' title='ABCL 0.18.1 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6632081505345604988</id><published>2010-01-13T11:21:00.000-08:00</published><updated>2010-01-13T12:06:15.897-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='special bindings'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>ABCL 0.18.0 released</title><content type='html'>&lt;span class="Apple-style-span"  style="  white-space: pre-wrap; font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;div&gt;On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to be able to announce the 0.18.0 release.&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="  white-space: pre-wrap; font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;This release features - among lots of other things - faster initial startup, faster special variable lookup and portable fasl files. Please refer to the &lt;/span&gt;&lt;a href="http://common-lisp.net/project/armedbear/release-notes-0.18.shtml"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;release notes&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; for the full list.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="  white-space: pre-wrap; font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;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&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="  white-space: pre-wrap; font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Source distribution archives can be downloaded in &lt;/span&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.18.0.zip"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;ZIP&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.18.0.zip.asc"&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(zip signature file)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; or &lt;/span&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.18.0.tar.gz"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;gzipped tar&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;span&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.18.0.tar.gz.asc"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(tar signature file)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; format.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="  white-space: pre-wrap; font-family:monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;In addition, a &lt;/span&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.18.0.zip"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;ZIP binary&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;span&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.18.0.zip.asc"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(bin-zip sig file)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; and &lt;/span&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.18.0.tar.gz"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;gzipped tar binary&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; &lt;/span&gt;&lt;span&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.18.0.tar.gz.asc"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;(bin-tar sig file)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; are available.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6632081505345604988?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6632081505345604988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2010/01/abcl-0180-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6632081505345604988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6632081505345604988'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2010/01/abcl-0180-released.html' title='ABCL 0.18.0 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-9194117207228629228</id><published>2009-12-28T05:36:00.000-08:00</published><updated>2009-12-28T05:39:11.627-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='GAE'/><category scheme='http://www.blogger.com/atom/ns#' term='Google App Engine'/><title type='text'>ABCL on Google App Engine (2)</title><content type='html'>Over the past month further work was done to improve ABCL startup times. This effort is especially directed at supporting ABCL on Google App Engine (GAE).&lt;br /&gt;&lt;br /&gt;The startup time of the trivial GAE example application in ABCL's source tree takes 19 seconds to startup, as mentioned in an earlier blog item. Although this is only a "Google theoretical time", because the page is served in only 12 seconds, this is clearly a lot. I heard many GAE applications have startup times between 5 and 10 seconds. It surely would be nice if our trivial application could get closer to that.&lt;br /&gt;&lt;br /&gt;A number of different solutions have been evaluated:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Reduction of the number of classes loaded at startup; making better use of ABCL's auto-loader facility&lt;/li&gt;&lt;li&gt;Supporting binary fasls&lt;/li&gt;&lt;li&gt;Create a system for finer-grained auto-loading support&lt;br /&gt;  &lt;/li&gt;&lt;/ol&gt; The reason exactly these scenarios were evaluated is the fact that I looked for help regarding this performance issue on irc (irc://irc.freenode.net/#...); the answer was "you're doing too much during setup or at the first request". My first reaction was that we didn't have any options: that's how ABCL is designed. After some discussion these scenarios came up though.&lt;br /&gt;&lt;br /&gt;The first and third scenarios are the result from many profiling sessions of "ABCL startup" time. The conclusion was that 35 to 45% of ABCL startup time is spent in Java reflection: when loading function classes ABCL needs to look up the class constructors to instantiate an object of the given class.&lt;br /&gt;&lt;br /&gt;Scenario 1 is about delaying loading of FASLs until a function in them is required. Scenario 3 goes into more detail about the use of a function: even when a FASL is loaded, not all functions in it will be used (immediately or ever).  The idea behind scenario 3 is to delay reflection API access until a function is actually used.&lt;br /&gt;&lt;br /&gt;Using scenario (1) startup times could be reduced somewhat, especially in the case of our minimal servlet application: it uses relatively few Lisp functions and the ones it does use are related to printing and streams. Those are concentrated in a limited number of fasls.&lt;br /&gt;&lt;br /&gt;In order to implement scenario (3), a quite bit more effort was required. The basic idea - as explained above - is that many functions in a FASL won't be used until a later stage in the application. In order to be able to delay resolution of the bytecode of the function, we introduced an object which - like the auto-loader - acts as a proxy for the unresolved function. This proxy class doesn't exhibit the same overhead, because it is resolved only once.&lt;br /&gt;&lt;br /&gt;Upon the first call to the function, its bytecode gets resolved and the proxy in the function slot gets replaced with the actual function. After that, the first call is forwarded to the real function, as if it had been called directly. Although the actual implementation is a bit more complex to account for the loading of nested functions, that's basically it.&lt;br /&gt;&lt;br /&gt;With scenario (3) applied to function definitions only, we were able to reduce startup time of the first request on GAE from 19 seconds to 11 seconds (roughly 40%). Today, we started to apply the same strategy to macro functions too. The result is - measured on my local PC, not GAE - a savings of another roughly 13%. Assuming that the same applies to GAE (as it did with the other 40%), we've realized a saving of 50% startup time!&lt;br /&gt;&lt;br /&gt;Binary fasls - scenario 2 - were an attempt to reduce the amount of work that needed to be done at startup: because the normal fasl loading process is driven by a text file containing Lisp code, that could have been one of the causes. We didn't remove support for them, but they didn't turn out to be a big saver; that can be explained because the binary fasls are just another ABCL function object which needs to be loaded using reflection.&lt;br /&gt;&lt;br /&gt;All in all did we save 50% start up time. Let this be an invitation to start experimenting with ABCL on GAE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-9194117207228629228?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/9194117207228629228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/12/abcl-on-google-app-engine-2.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/9194117207228629228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/9194117207228629228'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/12/abcl-on-google-app-engine-2.html' title='ABCL on Google App Engine (2)'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-5468550913875161682</id><published>2009-11-10T12:05:00.000-08:00</published><updated>2009-11-10T13:24:04.374-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='special bindings'/><category scheme='http://www.blogger.com/atom/ns#' term='Maxima'/><category scheme='http://www.blogger.com/atom/ns#' term='bindings'/><title type='text'>Maxima(l) performance</title><content type='html'>Last spring, the Maxima challenge for ABCL was to get it to complete its test suite. We've mastered that bit of Maxima for some months now. However, as turned out soon after that, Maxima runs rather slow on ABCL. To some extent - being limited by the JVM - that's to be expected. The performance observed was way off base though: much too slow.&lt;br /&gt;&lt;br /&gt;Through analysis, the cause was established to be the fact that Maxima declares lots of symbols to be special [and that ABCL doesn't offer a way to remove that specialness].&lt;br /&gt;&lt;br /&gt;Last summer we found that allowing Maxima to undeclare specials increases ABCL performance immensely (roughly 35%). However, the final goal for Maxima is to make more sparingly use of specials and declaring unspecial or undeclaring special isn't defined in the spec. Because of the two reasons it felt not right to implement the solution at the time: it would have been a very Maxima specific one to a problem Maxima intends to fix in the long run.&lt;br /&gt;&lt;br /&gt;Peter Graves noted that he converted the special bindings storage in XCL to use the same scheme as in SBCL/CCL, using an array with active bindings instead of a linked list of bindings. He observed a performance gain of 10% in his tests.&lt;br /&gt;&lt;br /&gt;Last weekend, I implemented the same scheme in ABCL and although the general speed up doesn't show 10% in our tests [which may very well differ from Peter's], we observed roughly 40% performance gain on Maxima's test suite!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-5468550913875161682?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/5468550913875161682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/11/maximal-performance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5468550913875161682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5468550913875161682'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/11/maximal-performance.html' title='Maxima(l) performance'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6152724367641331869</id><published>2009-11-07T12:02:00.000-08:00</published><updated>2009-11-07T12:17:17.002-08:00</updated><title type='text'>ABCL 0.17.0 released</title><content type='html'>On behalf of the developers of ABCL (Armed Bear Common Lisp) I'm glad to be able to announce the 0.17.0 release.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This release features - among lots of other things - performance improvements, a fix for unexpected thread termination due to uncaught exceptions and example code for running ABCL on Google App Engine. Please refer to the &lt;a href="http://common-lisp.net/project/armedbear/release-notes-0.17.shtml"&gt;release notes&lt;/a&gt; for the full list.&lt;br /&gt;&lt;br /&gt;If you have questions regarding use or licensing, or you find issues, please report back to the development list:&lt;br /&gt;&lt;br /&gt;armedbear-devel at common-lisp dot net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Source distribution archives can be downloaded in &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.17.0.zip"&gt;ZIP&lt;/a&gt; &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.17.0.zip.asc"&gt;&lt;span style="font-size:78%;"&gt;(zip signature file)&lt;/span&gt;&lt;/a&gt; or &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.17.0.tar.gz"&gt;gzipped tar&lt;/a&gt; &lt;span style="font-size:78%;"&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.17.0.tar.gz.asc"&gt;(tar signature file)&lt;/a&gt;&lt;/span&gt; format.  In addition, a &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.17.0.zip"&gt;ZIP binary&lt;/a&gt; &lt;span style="font-size:78%;"&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.17.0.zip.asc"&gt;(bin-zip sig file)&lt;/a&gt;&lt;/span&gt; and &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.17.0.tar.gz"&gt;gzipped tar binary&lt;/a&gt; &lt;span style="font-size:78%;"&gt;&lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-bin-0.17.0.tar.gz.asc"&gt;(bin-tar sig file)&lt;/a&gt;&lt;/span&gt; are available.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6152724367641331869?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6152724367641331869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/11/abcl-0170-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6152724367641331869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6152724367641331869'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/11/abcl-0170-released.html' title='ABCL 0.17.0 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-2305869080170937996</id><published>2009-10-26T15:25:00.000-07:00</published><updated>2010-05-26T11:22:04.266-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GAE'/><category scheme='http://www.blogger.com/atom/ns#' term='Google App Engine'/><title type='text'>ABCL on Google App Engine</title><content type='html'>Triggered by the interest of one of our users, last week was mostly dedicated to finding out how (how well) ABCL runs on &lt;a href="http://appengine.google.com/"&gt;Google App Engine&lt;/a&gt; (GAE). This is what we found out:&lt;br /&gt;&lt;br /&gt;To those readers who don't know: GAE is an environment for hosting web applications, backed by Google's storage and server clouds. It supports running applications written in Python and Java.&lt;br /&gt;&lt;br /&gt;GAE's Java environment turns out to be a servlet environment. This means there is a single servlet instance per JVM  which gets a chance to initialize itself in an &lt;span style="font-style: italic;"&gt;init()&lt;/span&gt; method.  The first request waits for this method to complete before it's being processed. Google makes no guarantees regarding the number of JVMs your application might be running on concurrently, or the lifetime of a single JVM: when GAE needs memory to run other apps, your JVM might get torn down when not serving any requests.&lt;br /&gt;&lt;br /&gt;Knowing the above, getting ABCL to run on GAE involved several steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Getting the Java SDK for GAE (don't forget to get Java's SDK too!)&lt;/li&gt;&lt;li&gt;Implementing Java classes wrapping ABCL&lt;/li&gt;&lt;li&gt;Writing a minimal servlet in ABCL&lt;/li&gt;&lt;/ol&gt;Step (1) turns out to be rather easy: just get it from the GAE website, unzip it and -if you want your local paths to match the examples on their site- rename it to remove the version number at the end (&lt;span style="font-family:courier new;"&gt;appengine-java-sdk-1.2.6&lt;/span&gt; becomes &lt;span style="font-family:courier new;"&gt;appengine-java-sdk&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Step (2) turned out to be a bit more involved, but after some twiddling, we found that we needed a minimum of 2 classes: at least one servlet class and a singleton class which loads a single ABCL into the JVM. [Note: a web application may contain any number of servlets with a minimum of 1.] The &lt;a href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/examples/google-app-engine"&gt;resulting application classes&lt;/a&gt;&lt;a href="http://trac.common-lisp.net/armedbear/browser/trunk/abcl/examples/google-app-engine"&gt; &lt;/a&gt;were committed to the ABCL repository.&lt;br /&gt;&lt;br /&gt;From there, a minimal "Hello world" web app was easy, making step (3) a quick one. The end result was entirely committed to the examples directory in ABCL's repository.&lt;br /&gt;&lt;br /&gt;GAE offers a performance dashboard to monitor your application through an administration web interface. From there, you can check the application logs, response times (called latency in the dashboard) and see how much CPU your application is using. For the latter, they use an indicative measure: the time which it would have taken to handle the request on an unloaded Core2 1.2Ghz processor. This compensates for many of the variances in the Google infrastructure which influence how long it actually takes to handle the request.&lt;br /&gt;&lt;br /&gt;With a working application in place, the next step was performance. Most notably that of the first request: all subsequent requests are handled within miliseconds (7 to 15 miliseconds), so there's no issue there. This is the part that dominated last week: It turned out that although the latency was around 12 seconds, the CPU consumption was around 19secs [1], both very high and said to be close to some upper limit which remains unspecified.&lt;br /&gt;&lt;br /&gt;We're striving to get these figures down: even though they would not really impact operation of a servlet in a regular hosting situation, GAE's regular servlet restarting makes these times more important. The best way to reduce figures like these is to get the figures the application scores on your local system down first. One of the first things which comes to mind is ABCL's "long" startup time: on my local Core2 - 1GB - 1.6Ghz machine it takes 1.7 seconds.&lt;br /&gt;&lt;br /&gt;More on the steps we took to optimize this startup time in a next blog post.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Conclusion: ABCL - if you accept the long initial request response - is definitely an option for writing your web applications in Common Lisp on a Java/JVM based infrastructure. It'll even run on Google App Engine. We'll keep you posted on how we fare on supporting that even better!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[1] In comparison: On the Clojure mailing list, 5.5 seconds is mentioned for Clojure and on #appengine (on irc.freenode.net), 7 to 10 seconds are said to be normal for JVM based apps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-2305869080170937996?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/2305869080170937996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/10/abcl-on-google-app-engine.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2305869080170937996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2305869080170937996'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/10/abcl-on-google-app-engine.html' title='ABCL on Google App Engine'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-5862469931402260654</id><published>2009-10-17T12:50:00.000-07:00</published><updated>2009-10-17T13:07:55.290-07:00</updated><title type='text'>ABCL 0.16.1 released</title><content type='html'>On behalf of the ABCL development team, I would like to announce the new ABCL release: 0.16.1&lt;br /&gt;&lt;br /&gt;This release is a maintenance release on the 0.16 version line. In total four issues have been fixed:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; In case of unsuccessful completion of a COMPILE call, ABCL would leak (= not correctly clean up behind itself) temporary files&lt;/li&gt;&lt;li&gt; In some cases, an exception thrown by a GO or RETURN-FROM form would not be correctly caught, causing the thread in which it occurs to terminate&lt;/li&gt;&lt;li&gt; Honor appearance of &lt;b&gt;&amp;amp;allow-other-keys&lt;/b&gt; in CLOS MAKE-INSTANCE argument checking&lt;/li&gt;&lt;li&gt;  More careful checking of 'null' arguments when processing stack frames&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Should you have any comments, remarks or bugs to be found in this release, please contact the developers through the mailing list mentioned on the &lt;a href="http://common-lisp.net/project/armedbear/"&gt;ABCL project home page&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-5862469931402260654?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/5862469931402260654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/10/abcl-0161-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5862469931402260654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/5862469931402260654'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/10/abcl-0161-released.html' title='ABCL 0.16.1 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6225486743354755982</id><published>2009-10-12T06:03:00.000-07:00</published><updated>2009-10-13T06:06:19.769-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='CLOS'/><title type='text'>CLOS performance</title><content type='html'>Traditionally, ABCL's CLOS implementation has been depicted as one of its weekest spots. The two main reasons being on one hand its speed and on the other the absense of a good MOP.&lt;br /&gt;&lt;br /&gt;I'm proud to see that some of the improvements over the past year turn out to be &lt;a href="http://common-lisp.net/pipermail/armedbear-devel/2009-October/000408.html"&gt;real performance improvers&lt;/a&gt;. Ofcourse, &lt;a href="http://common-lisp.net/pipermail/armedbear-devel/2009-October/000415.html"&gt;there's more to wish for and improvements will keep coming in&lt;/a&gt;. However, another improvement of 90% as in the linked post... ?&lt;br /&gt;&lt;br /&gt;As shown for a fact, ABCL's CLOS is improving and while possibly still it's weekest spot, it's definitely becoming useable. If you find performance issues, preferably with example code to show the issue, please report to the Armed Bear mailing list (address information on the &lt;a href="http://common-lisp.net/project/armedbear/"&gt;project front page&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;[Note added: Though 90% improvement is hard to achieve, another 30% (&lt;a href="http://common-lisp.net/pipermail/armedbear-devel/2009-October/000408.html"&gt;24 seconds&lt;/a&gt; to &lt;a href="http://common-lisp.net/pipermail/armedbear-devel/2009-October/000418.html"&gt;16 seconds&lt;/a&gt;) were realised last weekend.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6225486743354755982?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6225486743354755982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/10/clos-performance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6225486743354755982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6225486743354755982'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/10/clos-performance.html' title='CLOS performance'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-2444546464944041658</id><published>2009-10-06T01:11:00.000-07:00</published><updated>2009-10-06T14:32:19.930-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='correctness'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>Struggling with and surviving TAGBODY and BLOCK compilation</title><content type='html'>&lt;div&gt;At first glance, compilation of TAGBODY and BLOCK forms seems simple: the tags in the TAGBODY are all static and the exit point for the BLOCK is also well defined. Summarizing: no complexities with the dynamic environment of any kind.&lt;/div&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;However, taking a closer look and adding closures to the picture, things get a little more complicated: GO or RETURN-FROM can mean transfers of control to exit points outside the current function. Consider the snippet below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(block NIL&lt;br /&gt;  (funcall (lambda () (return-from NIL 3)))&lt;br /&gt;  4)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Apart from the fact that the example is too obvious: the lambda form can be inlined, it demonstrates what I mean by "RETURN-FROM will cause a transfer of control to a non-local exit point": The exit point to jump to is located outside the lambda.&lt;br /&gt;&lt;br /&gt;So far, so good: the above existed for a long time in ABCL and is achieved by raising Java exceptions. Now things get more contrived: we'll use a closure created inside a BLOCK form which is part of a recursively called function.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(defun foo (fun)&lt;br /&gt;  (block B&lt;br /&gt;      (if fun&lt;br /&gt;         (funcall fun)&lt;br /&gt;         (foo (lambda () (return-from B :good)))&lt;br /&gt;      :bad))&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, evaluating (foo nil) will cause the following function calls:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; 1: (foo nil)&lt;br /&gt;2:   (foo (lambda () ...)&lt;br /&gt;3:     (funcall (lambda () ...)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To which exit point would you expect the lambda to return? You should expect it to return to the exit point associated with B block from the first FOO call. Now it's becoming clear what's so hairy about compiling BLOCK (and TAGBODY which has the same issue): there are 2 B blocks on the stack, so, which one to return to?&lt;br /&gt;&lt;br /&gt;The way this last issue - recursive BLOCK and TAGBODY forms - was solved in ABCL just last weekend was to create a (hidden) variable which gets set to a certain unique value upon entry of the block at run time. Then, any non-local transfer of control uses that block identifier value to find the right block to jump to.&lt;br /&gt;&lt;br /&gt;Actually, this solution has a slight advantage for TAGBODY over the pre-existing solution: the old solution checked all symbols in a TAGBODY before concluding the GO wasn't meant for the given tagbody. With the new approach, a single variable test (equality of object pointers) allows checking if the GO is meant for any given TAGBODY or that stack unwinding should continue.&lt;br /&gt;&lt;br /&gt;But then there's another issue: closures can be assigned to variables which outlive the extent of the originating block or tagbody. Like the snippet below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;(progn&lt;br /&gt;   (block B&lt;br /&gt;      (setq a (lambda () (return-from B 3))))&lt;br /&gt;   (funcall a))&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As indicated above, ABCL uses Java exceptions for non-local transfers of control. Now, if the (funcall a) form would throw a Go exception, regardless of the fact that there's no matching try/catch block, the exception would remain unhandled and the processing thread would exit. This is the situation in ABCL as it existed before last weekend.&lt;br /&gt;&lt;br /&gt;Now, the solution to the problem with the recursive function calls has a nice additional benefit. Since there's storage shared between the closure and the BLOCK - they now share a variable - the variable can be used to let the block communicate to the closure that its extent has ended by setting it to a specific value.  The GO form can then check for that condition before it throws the actual Go exception, making sure there's always a matching try/catch block. If there's no such block ABCL now generates a call to ERROR, allowing interactive error handling and selection of restarts where it used to unwind the stack to some location which happened to catch the exception - or terminate the thread if that didn't happen. Quite an improvement I'd say.&lt;br /&gt;&lt;br /&gt;As a consequence of the changes described above, the code presented in the lisp paste at &lt;a href="http://paste.lisp.org/display/88240" target="_blank"&gt;http://paste.lisp.org/display/&lt;wbr&gt;88240&lt;/a&gt; - which tests the full requirements of the CL spec - does succeed with today's ABCL (whereas it didn't last week!)...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-2444546464944041658?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/2444546464944041658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/10/struggling-with-and-surviving-tagbody.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2444546464944041658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2444546464944041658'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/10/struggling-with-and-surviving-tagbody.html' title='Struggling with and surviving TAGBODY and BLOCK compilation'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-9202247127262986339</id><published>2009-09-15T03:38:00.001-07:00</published><updated>2009-09-15T22:20:51.641-07:00</updated><title type='text'>Loading FASLs from JAR files</title><content type='html'>Currently ABCL is a pretty decent decent Common Lisp that runs on the JVM, but we have really not started to add the necessary features which cater to making that "special" relationship easier.  One of this rough sports involves how one packages ABCL applications for distribution. Since JAR files are currently the natural base unit for the distribution of JVM packages, it would make sense if one could load ABCL FASLs from JAR files.  Indeed, this is an often requested feature on the &lt;a href="http://common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel"&gt;armedbear-develop&lt;/a&gt; mailing list.   Right after we published abcl-0.16.0, one of the first features to hit the trunk was the ability to load FASLs from JAR files, which we would like to explain a little bit about here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;N.B. you'll need to build ABCL from&lt;a href="http://www.cliki.net/Armed%20Bear%20Lisp#svn"&gt; SVN trunk&lt;/a&gt; to use this feature.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ABCL has long had an extension to the semantics of Common Lisp PATHNAME that allowed one to specify entries of JAR files.  Typing the following at an ABCL REPL:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;CL-USER&gt; (defvar *jar-entry* #p"jar:file:/home/evenson/foo.jar!/bar.abcl")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;would create a reference in *JAR-ENTRY* to a PATHNAME that contained a reference in the path of the JAR in the DEVICE field, with the reminder of the PATHNAME referring to the actual JAR entry.  I think these semantics were used from J to load extension functions, but they were currently unused in the ABCL codebase.&lt;br /&gt;&lt;br /&gt;Now, *JAR* has the following parts:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    CL-USER&gt; (pathname-device *jar-entry*)&lt;/span&gt; &lt;span style="font-family:courier new;"&gt; &lt;br /&gt;&lt;br /&gt;#P"/home/evenson/foo.jar"&lt;/span&gt; &lt;span style="font-family:courier new;"&gt; &lt;br /&gt;&lt;br /&gt;CL-USER&gt; (pathname-name *jar-entry*)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"foo"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note that DEVICE is actually a reference to another PATHNAME at this point.&lt;br /&gt;&lt;br /&gt;What we added in &lt;a href="http://trac.common-lisp.net/armedbear/changeset/12141"&gt;commit  12141&lt;/a&gt; was the ability to load the FASL&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    CL-USER&gt; (load *jar-entry*)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;which would load the code compiled into the 'bar.abcl' FASL that was packed into the JAR.  The ".abcl" extension is not strictly necessary:  we check for entries ending in "*.abcl" and "*.lisp" for you in the same way LOAD works on the filesystem&lt;br /&gt;&lt;br /&gt;What doesn't work yet is MERGE-PATHNAME with these special PATHNAMES.  And looking for the JAR file on the current CLASSPATH.  With these sort of conveniences it will be possible to include ASDF packaged systems in the JAR easily.  Stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-9202247127262986339?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/9202247127262986339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/09/loading-fasls-from-jar-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/9202247127262986339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/9202247127262986339'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/09/loading-fasls-from-jar-files.html' title='Loading FASLs from JAR files'/><author><name>urn:recursive.not.org</name><uri>http://www.blogger.com/profile/10170782890678026473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-2257893342998025539</id><published>2009-09-06T03:20:00.000-07:00</published><updated>2009-09-06T06:50:21.786-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>ABCL 0.16.0 released</title><content type='html'>On behalf of the developers of ABCL (Armed Bear Common Lisp) - a lisp implementation running on the JVM - I'm glad to be able to announce the 0.16.0 release.&lt;br /&gt;&lt;br /&gt;This release features - among lots of other things - performance improvements,&lt;br /&gt;better type checking for the THE form and ANSI tests fixes. Starting this release&lt;br /&gt;JSR-223 support is delivered in the sources (this corrects an error in the procedure for earlier releases). You can find the release notes at:&lt;br /&gt;&lt;br /&gt;  &lt;a href="http://common-lisp.net/project/armedbear/release-notes-0.16.shtml" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/release-&lt;wbr&gt;notes-0.16.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you have questions regarding its license or use, or you find issues, please report back to the development list:&lt;br /&gt;&lt;br /&gt;  armedbear-devel at common-lisp dot net&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The sources can be downloaded in ZIP or .tar.gz form common-lisp.net:&lt;br /&gt;&lt;br /&gt;  &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.16.0.tar.gz" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/releases/&lt;wbr&gt;abcl-src-0.16.0.tar.gz&lt;/a&gt;&lt;br /&gt;  &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.16.0.zip" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/releases/&lt;wbr&gt;abcl-src-0.16.0.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Signatures are available under:&lt;br /&gt;&lt;br /&gt;  &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.16.0.tar.gz.asc" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/releases/&lt;wbr&gt;abcl-src-0.16.0.tar.gz.asc&lt;/a&gt;&lt;br /&gt;  &lt;a href="http://common-lisp.net/project/armedbear/releases/abcl-src-0.16.0.zip.asc" target="_blank"&gt;http://common-lisp.net/&lt;wbr&gt;project/armedbear/releases/&lt;wbr&gt;abcl-src-0.16.0.zip.asc&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-2257893342998025539?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/2257893342998025539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/09/abcl-0160-released.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2257893342998025539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/2257893342998025539'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/09/abcl-0160-released.html' title='ABCL 0.16.0 released'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-7864817731213351615</id><published>2009-08-23T10:45:00.000-07:00</published><updated>2009-08-23T12:31:49.471-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='correctness'/><category scheme='http://www.blogger.com/atom/ns#' term='safety'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>Type checking (or: safety belt on with compiler code)</title><content type='html'>ABCL's compiler stores properties of blocks of code in a structure. Although it recognizes a number of different types of blocks (BLOCK, TAGBODY, etc.), there's only one structure type - called BLOCK-NODE.&lt;br /&gt;&lt;br /&gt;While cleaning up this situation, separating the different block-node uses into different structures, I found ABCL didn't verify that the argument passed to the accessor functions for structure slots.&lt;br /&gt;&lt;br /&gt;Cutting a long story short, we had to implement:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Structure type verification in the accessor functions&lt;/li&gt;&lt;li&gt;THE special operator type verification in the interpreter&lt;/li&gt;&lt;li&gt;THE special operator type verification for other policies than a *safety* value of 3 in the compiler&lt;/li&gt;&lt;/ol&gt;The first point being an issue with the accessor functions generated by ABCL: they didn't generate code to verify the argument passed. The effect being that a different structure with the same (or larger) number of slots could be passed in without an error occuring.&lt;br /&gt;&lt;br /&gt;The second point being an issue that - even if there was a THE form - the interpreter would never verify the type specified as if it wasn't there. Talking to Peter Graves, I found that he had never intended the interpreter to be a full Common Lisp interpreter, meaning for ABCL to be a compiler-only system. The interpreter was merely there as a bootstrapping mechanism.&lt;br /&gt;With all the energy spent last year to get it to the same level of CL conformance as the compiler, this point just had to be ironed out.&lt;br /&gt;&lt;br /&gt;The third point being the issue that the compiler would treat THE as TRUELY-THE for any other *safety* value than 3. This is clearly not strict enough: it means no type verification takes place at all at any of these levels, while the user may expect some level of type verification for any level of *safety* other than zero.&lt;br /&gt;&lt;br /&gt;Now, I can continue the reorganization of the compiler code with a safety-belt on: with the right *safety* setting, I know my structure types (and their changes) are being verified!&lt;br /&gt;&lt;br /&gt;As a general benefit: this applies to all code running in ABCL, of course. Should you want to prevent type-verification (for example for speed reasons) in your code, just use a *safety* value of zero. In this case, the compiler simply assumes the type fits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-7864817731213351615?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/7864817731213351615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/08/type-checking-or-safety-belt-on-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/7864817731213351615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/7864817731213351615'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/08/type-checking-or-safety-belt-on-with.html' title='Type checking (or: safety belt on with compiler code)'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-7933331104665038843</id><published>2009-08-10T07:46:00.001-07:00</published><updated>2009-11-10T13:27:34.031-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maxima'/><title type='text'>Efforts paying off</title><content type='html'>Well, we've had a nice break on our self-set applicability target. As explained before, a Common Lisp implementation isn't of much use if it's not able to run much of the already-existing software available for the language. As an indicator we use ABCL's ability to run a number of software packages. Maxima is one of them.&lt;br /&gt;&lt;br /&gt;Last autumn, ABCL wasn't able to complete the test suite delivered with Maxima. This spring ABCL would run it, but with many errors. Due to continued efforts - from both sides - and mainly the fact that Maxima changed their number comparisons to be CL-compliant (EQL), there are only 3 failures remaining - out of over 4500.&lt;br /&gt;&lt;br /&gt;The remaining 3 failure clearly ABCL issues, where the outcome returned is of a lesser precision than expected by Maxima's test suite. So, even though we're not completely there yet, I'd say we're definitely usable with Maxima.&lt;br /&gt;&lt;br /&gt;The note to add would be that our performance is less than acceptable with Maxima: a lot slower than any other Lisp implementation. The performance issue will also be addressed from both sides: we'll research how to improve performance (generally) on our side. One thing we know to be a performance issue with Maxima is their over-use of special variables. This is - according to Robert Dodier - something being addressed on their side.&lt;br /&gt;&lt;br /&gt;With the specials over-use fixed, ABCL can be over 40% faster, as proven with a local hack to compensate for part of the over-use. Unfortunately, the hack can't make it into the ABCL repository as a general solution.&lt;br /&gt;&lt;br /&gt;Work is under way though to improve repeated special binding access. Such repetitions occur if a loop uses a special variable as a looping variable, or if a special variable is used to collect results. The former is a use-case in Maxima's code; the latter is a pattern regularly seen in ABCL's compiler.&lt;br /&gt;&lt;br /&gt;In ABCL's current code, each time a special variable is accessed, be it for reading or writing, the binding is looked up. The work focuses on reusing a binding after it has been looked up once. While in most cases this won't make a performance difference: the binding will be used only once, in some applications it may help improve performance quite a bit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-7933331104665038843?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/7933331104665038843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/08/efforts-paying-off.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/7933331104665038843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/7933331104665038843'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/08/efforts-paying-off.html' title='Efforts paying off'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-3862101932514540967</id><published>2009-07-12T13:03:00.000-07:00</published><updated>2009-07-25T04:29:29.453-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='correctness'/><category scheme='http://www.blogger.com/atom/ns#' term='improvement'/><category scheme='http://www.blogger.com/atom/ns#' term='ABCL'/><title type='text'>Beyond correctness and conformance: applicability and performance</title><content type='html'>Last time was about how the team is working to advance ABCL's correctness and conformance; these two are mostly measured by the &lt;a href="http://common-lisp.net/project/ansi-test/"&gt;ANSI tests&lt;/a&gt;. Next to those characteristics, we also introduced a measure called 'applicability'. It's a qualitative measure which we say increases when (more) existing Lisp code is made to (or is proven to) work with ABCL.&lt;br /&gt;&lt;br /&gt;So far, we've been using the following software to test (and improve) the applicability of ABCL:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Maxima&lt;/li&gt;&lt;li&gt;&lt;a href="http://ap5.com/"&gt;AP5&lt;/a&gt;&lt;/li&gt;&lt;li&gt;cl-bench&lt;/li&gt;&lt;li&gt;SLIME/swank&lt;/li&gt;&lt;/ul&gt;Next to the above we know a number of people are using ABCL to write their own applications. See &lt;a href="http://common-lisp.net/project/armedbear/testimonials.shtml"&gt;the testimonials page&lt;/a&gt;. If you have software to complete the list of known-working software, please contact our developers list. If you have software which is almost working, please help us improve our applicability by at least reporting; patches to resolve the situation are even more appreciated.&lt;br /&gt;&lt;br /&gt;Another aspect of our user experience is performance. Being an implementation on the JVM, of course we're restricted in many ways on which code we can generate and how we store our data. As a result we'll be in a disadvantageous position to start with.&lt;br /&gt;&lt;br /&gt;That doesn't mean there's no room for improvement in ABCL at the moment. The development team has gradually moved into the area of profiling and improving the implementation over the last 2 or 3 months. As it turns out, there's still a lot which could be improved, with the following examples:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Support for unboxed single-floats and double-floats in the compiler&lt;/li&gt;&lt;li&gt;Careful creation of new objects - focussing on re-use - in the support library&lt;/li&gt;&lt;li&gt;Prevent unnecessary re-opening of system files (fasls and others)&lt;/li&gt;&lt;li&gt;Prevent unnecessary loading of compiled files (which clear out the HotSpot caches)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;As you can see, more parts and more aspects of the system are receiving our attention.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-3862101932514540967?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/3862101932514540967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/07/beyond-correctness-and-conformance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3862101932514540967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/3862101932514540967'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/07/beyond-correctness-and-conformance.html' title='Beyond correctness and conformance: applicability and performance'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4235439971837126416.post-6978954060510954577</id><published>2009-07-12T00:28:00.001-07:00</published><updated>2009-07-14T11:04:52.172-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='renewed'/><category scheme='http://www.blogger.com/atom/ns#' term='restarted'/><category scheme='http://www.blogger.com/atom/ns#' term='Lisp'/><title type='text'>ABCL actively developed</title><content type='html'>Last year around August, Peter Graves asked me (Erik Huelsmann) to take over ABCL (Armedbear Common Lisp) development. I gladly accepted.&lt;br /&gt;&lt;br /&gt;Since then we - a small team of lisp hackers - have been hard working to improve ABCL. Yesterday it was pointed out to me that the Lisp community was probably unaware of the renewed energy being put into ABCL's development.&lt;br /&gt;&lt;br /&gt;Our efforts have concentrated on 3 areas of improvement:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Correctness - doing right what is already implemented&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Conformance - implementing what the spec says should be&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Features - things the spec doesn't require, but which are too handy not to provide standard&lt;/li&gt;&lt;/ul&gt;With respect to correctness and conformance we are glad to be able to say that the &lt;a href="http://common-lisp.net/project/ansi-test/"&gt;ANSI test&lt;/a&gt; failures have been drastically reduced to below 40 (coming from hundreds).&lt;br /&gt;&lt;br /&gt;With respect to the features, we're proud of our achievements, which are two-fold: first of all we have added some Lisp features most implementations provide (&lt;br /&gt;&lt;ul&gt;&lt;li&gt;compiler improvements such as unboxed local variables&lt;/li&gt;&lt;li&gt;MACROEXPAND-ALL&lt;/li&gt;&lt;li&gt; COMPILER-LET and&lt;/li&gt;&lt;li&gt;locking primitives for threading&lt;/li&gt;&lt;li&gt;lots of other stuff;&lt;/li&gt;&lt;/ul&gt; second we added some features which matter for a Lisp in a Java environment:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JSR-223 support: being a scripting engine for any Java application&lt;/li&gt;&lt;li&gt;Threading primitives (different ones) which inter operate with the Java world&lt;/li&gt;&lt;li&gt;Improved Ant-based build system&lt;br /&gt;&lt;/li&gt;&lt;li&gt;more...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;But we did more: ABCL was separated out of the  &lt;a href="http://armedbear-j.sourceforge.net/"&gt;source tree of the J editor&lt;/a&gt; (and moved to &lt;a href="http://common-lisp.net/project/armedbear/"&gt;common-lisp.net&lt;/a&gt;). A wiki, mailing lists, new project pages, a repository and defect tracker have been set up. A bi-monthly release schedule has been put into place - source releases only for now and we're working toward binary releases too.&lt;br /&gt;&lt;br /&gt;On this blog, I will discuss the advances and difficulties that make up the ABCL development experience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4235439971837126416-6978954060510954577?l=abcl-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abcl-dev.blogspot.com/feeds/6978954060510954577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://abcl-dev.blogspot.com/2009/07/abcl-actively-developed.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6978954060510954577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4235439971837126416/posts/default/6978954060510954577'/><link rel='alternate' type='text/html' href='http://abcl-dev.blogspot.com/2009/07/abcl-actively-developed.html' title='ABCL actively developed'/><author><name>ehuelsmann</name><uri>http://www.blogger.com/profile/18367657358957126293</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry></feed>
