Tuesday, April 29, 2014

An abcl-1.3.1 Spring Cleaning

The Bear came out of his cave on 30-APR-2014 for a spring cleaning.  He grumbled 
something about wanting to look good for Paris next week, and then went back inside
to sleep it off.
[binaries]: http://abcl.org/releases/1.3.1/     [source]: http://abcl.org/svn/tags/1.3.1/
  • The underlying Java Function Interface (JFI) now converts CL:T and CL:NIL to JAVA:+TRUE+ and JAVA:+FALSE+.  Users who wish to reference a JAVA:+NULL+ should do so explicitly.
  • Fix Uniform Naming Convention (aka "UNC" or "network") paths under Windows. http://abcl.org/trac/changeset/14659

    DIRECTORY now works again on UNC paths.

    UNC paths may be either specified with either back slash (#\\) orforward slash (#\/) doubled as the first character in a PATHNAME namestring.

    For the patterns in
    [server]  is stored as HOST.
    [share] is stored as DEVICE.
    [directories-and-files] gets parsed as per the normal rules under Windows.

    Mixing namestrings with both backslash and slash characters can lead to unpredictable results.  It is recommended not to use backslash characters in namestrings if it can be avoided.  The pathname printed representation is always normalized to using forward slash delimiters.
  • Find contrib based on system jar name. 
Thanks to everyone who uses ABCL!

Sunday, March 16, 2014

abcl-1.3.0 released

abcl-1.3.0 is a feature release.



## Features

*  Make LispStackFrame.UNAVAILABLE_ARG a singleton object,
   and lazily create the little used portions of the Lisp stack.

    Aggressively cache and control the use of memory by the underlying
    Lisp stack frame representation by introducing the private
    LispThread.StackFrame and LispThread.StackSegments classes.

    Contributed by Dmitry Nadezhin.

    LispStackFrame object are allocated on every
    LispThread.execute(...) .  However, they are seldom [accessed]
    ([... verify via] inspect[tion of the] stack trace). This patch
    delays allocation of LispStackFrame? objects until they are
    requested.  Raw information about stack frames is stored in
    stack. Stack is an Object[] array (more precisely a list of [...]4
    [Mib] Object[] arrays).

    ME: We are going to need a way to try to less agressively grab 4Mib
    chunks in low memory situations.

    Memory profiling of ABCL shows that the classes with largest
    allocation count are org.armedbear.lisp.LispStackFrame and

    Contributed by Dmitry Nadezhin.

    [r14572]: http://abcl.org/trac/changeset/14572
    [r14579]: http://abcl.org/trac/changeset/14579

*  ASDF shipped with the implementation

*  per function call stack and memory exception handler in CL:COMPILE

   Inline calls to jrun-exception-protected (used by handler-bind to
   catch out of memory conditions).  This commit saves generation
   roughly 50 cls files.

   [r14552]: http://abcl.org/trac/changeset/14552

*  SYS:SHA256 audited

    The functionality if the SYS:SHA256 algorithim has been audited for
    use on inputs of single for files with recently shipping ORCL Java 7
    implementations (through jdk-1.7.0_51).

    [r14582]:  http://abcl.org/trac/changeset/14582

* Connect to NetBeans controlled JDWP via SLIME

    The Netbeans IDE configuration now includes a way to connect to
    the running-under-jdb ABCL via SLIME.  One needs a version of
    SLIME able to be loaded from its 'swank.asd' definition.  

* Install 'abcl.jar' and 'abcl-contrib.jar' locally as Maven artifacts

    The Ant `abcl.mvn.install` target now installs build artifacts
    into the local Maven repository (Olof-Joachim Frahm)

    [r14579]: http://abcl.org/trac/changeset/14606

## Compatibility


   The implementation specific :RESOLVE-SYMLINKS argument to the ANSI
   DIRECTORY function has been changed to nil.  This implements
   behavior closer to SBCL and guarantees that a DIRECTORY operation
   will not signal a file error.

   [r14619]: http://abcl.org/trac/changeset/14619
   [ticket-340]: http://abcl.org/trac/ticket/340

## Fixes

*  Fix CL:SLEEP for intervals less than a millisecond.  

   For intervals less than or equal to a nanosecond, including an
   interval of zero, the current thread merely yields execution to
   other threads.

   [r14632]: http://abcl.org/trac/changeset/14632

## Tested

### "Java_HotSpot(TM)_64-Bit_Server_VM-Oracle_Corporation-1.7.0_51-b13" "x86_64-Mac_OS_X-10.9.1"

### "Java_HotSpot(TM)_64-Bit_Server_VM-Oracle_Corporation-1.8.0-b129" "x86_64-Mac_OS_X-10.9.2"

## Contrib

#### abcl-asdf

*  Now working with both Maven 3.0.x and 3.1.x.  Thanks to Anton for
   the help!

   [ticket-328]: http://abcl.org/trac/ticket/328

*  cache Maven dependency resolution to avoid repeated lookups.

   Instead of calling ABCL-ASDF:RESOLVE in both the ASDF COMPILE-OP
   and LOAD-OP, we now cache the result of invocation in COMPILE-OP
   and add this value in the LOAD-OP phase. Contributed by Cyrus

   [r14631]: http://abcl.org/trac/changeset/14631

#### jna
   Now references jna-4.0.0.  Some incompatibility with CFFI ([in
   progress with fixing upstream][cffi-easye]).

[cffi-easye]: http://github.com/easye/cffi/

Sunday, June 30, 2013

Post-ECLM 2013: abcl-1.2.1 released

"So long and thanks for all the Jamon"

27 June 2013

*  Tested:  orcl-jdk-1.7.0_25 orcl-jdk-1.6.0_43

** ansi tests rc-2 failing 11-13 of 21708 total.  
   Some regressions since 1.1.1

*  Stablility fixes; additional Quicklisp compatibility

** Fix (make-instance 'standard-generic-function)

Wednesday, June 5, 2013

The Bear changes its Lair

For better management of the reliability of Armed Bear Common Lisp hosting infrastructure, we have renamed the essential services into the abcl.org domain. This transition has been proceeding since the beginning of April in a manner that was hopefully mostly invisible to the User.  

The binaries and source of the first release candidate of ABCL 1.2 are now available.  Very few additional issues will probably be resolved without additional patches, but if you see something obvious to change that doesn't disturb the stability of our testing infrastructure please get us the patches in the next few days.  Interestingly enough, documentation nearly always has this property.

Sunday, March 31, 2013

Pitfalls of shared structure, or: fixing XPATH compilation

In recent blog posts, Hans Hübner mentions how ABCL starts to be usable by the average Common Lisp programmer. Yet he also ran into the longer standing issue that the XPATH library doesn't want to be compiled by ABCL 1.1.1. (This is where his remark how the CXML-STP library doesn't work comes from.)

Last weekend I finally found out what the underlying problem was that XPATH triggered: shared structure in forms being compiled. Even though it's quite easy to generate code with shared structure, apparently few projects use it in a way which triggered ABCL into incorrect behaviour.

Case in point was a compiler macro expansion containing a literal list. After expansion, the literal became part of the code being compiled and the compiler modified the literal in place, resulting in problems on all subsequent expansions.

The cause of the issue dates all the way back to even before I started working on ABCL. Back then the compiler used to modify the CARs and CDRs of the forms it was compiling. Much of this behaviour was already replaced before last week as my intuition told me this is undesirable, with the replacement being nice side-effect-free functional code. Even though the reason for this behaviour isn't documented, I'll assume it was to reduce consing and thereby reduce pressure on the JVM's garbage collector. In today's world with new garbage collectors and much improved JIT compilers in the JVM, this issue isn't an issue anymore.

To cut a long story short: XPATH compilation fixed, compiler changed to functional style and libraries depending on XPATH (like CXML-STP) also fixed.

On to the next cl-test-grid failure...