[asdf-devel] ASDF 2.27 release candidate

Faré fahree at gmail.com
Fri Dec 28 05:12:51 UTC 2012

OK, so 2.26.45 is my new release candidate for ASDF 2.27.
Please grab it and test it.

Since last release candidate 2.26.24,
* lots of work was done towards backwards compatibility,
  fixing bugs introduced or uncovered
  during the previous fixing of essential conceptual bugs
  through massive refactoring of internals.
* tests were added for asdf-bundle, which now also runs on XCL,
  but not on ECL with bytecode compiler.
* tests were ran on all platforms with a command line on Linux x86-64
  and even on LispWorks Personal Edition and Genera that don't,
  and they all pass modulo a few implementation bugs that were #-'ed out.
* upgrade tests were also made to pass everywhere that's meaningful
* consequent minor fixes to warnings or corner case errors were issued for
  Allegro, CLISP, ECL, ECL with bytecode compiler, SBCL, XCL.
* There was a fix for LispWorks Personal Edition.

You need to update ironclad and nibbles to run with the new ASDF
because of the dropped if-component-dep-fails feature,
but all other software should continue to run unmodified.

Since release 2.26, the main changes are as follows:

  * ASDF-BUNDLE was merged into ASDF.
    This notably means fewer headaches for users of ECL;
    it also means a new load-fasl-op feature for all users of a modern CL,
    making it easier to deliver software as a single fasl.
    All remnants of its predecessor asdf-ecl were removed.

  * *decades-old* bugs of notable significance were fixed:
    (a) changes in dependencies now trigger a rebuild across systems, and
    (b) timestamps are now correctly propagated
    In olden days, some have argued for not rebuilding systems that :depend-on
    a modified one as a "feature". It really isn't. On the other hand,
    if they want to explicitly prevent a rebuild, the actual feature :force-not
    is there to help them (released as part of 2.21 in April 2012).
    I will write about those bugs.

  * PREPARE-OP was introduced to fix a conceptual bug in the ASDF object model.
    It corresponds to "loading the dependencies of a component and its parents"
    and is explicitly depends-on'ed before to load or compile the component,
    instead of implicitly depending on it via magic in the TRAVERSE algorithm,
    which magic proved insufficient in cases revealed by the above bugs.
    It propagates upward in the component hierarchy, rather than downward,
    like the TRAVERSE algorithm used to systematically propagate dependencies.

  * TRAVERSE was gutted out and factored into reusable higher-order functions,
    which not only fixes the above conceptual bug, but makes for semantics
    that are simpler to implement, possible to understand, easier to extend,
    and less limited in expressivity. TRAVERSE doesn't automatically propagate
    operations downward the component hierarchy anymore;
    propagation is now implemented through methods on COMPONENT-DEPENDS-ON.

  * COMPONENT-DEPENDS-ON is now more powerful: it can express dependencies
    on arbitrary operation objects (i.e. operations of the same class
    can have different options) acting on arbitrary component objects
    (i.e. not necessarily siblings of the current component).
    The ASDF object model can now express arbitrary build graphs, with
    special magic no more for children components vs other dependencies.

  * Internals have been refactored, and some sorry features were excised.
    The semantics of OPERATION-DONE-P is simplified and now well-specified.
    The dubious DOFIRST mechanism is gone.
    FIND-COMPONENT will pass component objects through, and
    a corresponding FIND-OPERATION replaces MAKE-SUB-OPERATION.
    Several internal accessors were renamed.

  * IF-FEATURE is a new attribute of components that accepts an arbitrary
    feature expression such as (:and :sbcl (:or :x86 :x86-64)),
    which when defined is a precondition to the component being enabled;
    when the expression is false, the component is disabled,
    and dependencies to it are removed.
    It replaces the misguided :if-component-dep-fails attribute of modules
    and the accompanying :feature feature, which were dropped.
    They were not very expressive, clunky to use, and relied on baking
    conceptually dubious non-local behavior in the old TRAVERSE algorithm,
    which belied the object model and defeated other features.
    Unhappily, this breaks backwards compatibility for the few who used it,
    namely sb-grovel, nibbles and ironclad.
    A minimal compatibility layer allows ASDF 2.27 or later to load
    the SB-GROVEL of old versions of SBCL, but it won't suffice to load
    an old version of nibbles or ironclad; please upgrade them
    a recent version that was updated to support ASDF 2.27.

  * ASDF2.27 was added to the *features* so you can detect the presence of
    this massively updated ASDF and its new features with #+asdf2.27.
    This is *not* ASDF3, for we painfully maintained backwards compatibility.

  * Portability updates were done for
    ABCL, CLISP, CMUCL, ECL, LispWorks Personal Edition, MKCL, XCL.

  * Documentation received some small updates.

  * Tests were updated, notably including support for asdf-bundle.
    They were successfully run on ccl clisp sbcl ecl ecl_bytecodes
    cmucl abcl scl allegro lispworks allegromodern xcl.
    Manual tests were run on lispworks-personal-edition genera.
    Untested were cormancl mkcl rmcl.

  * POIU was updated. This extension is distributed separately from ASDF.
    It is now much simplified and made more correct by construction by
    reusing the new TRAVERSE infrastructure of ASDF and now being able to
    assume the ASDF object model is a complete description of dependencies.
    On SBCL it will handle deferred warnings from background compilations.
    On platforms that cannot fork it will gracefully fall back
    to serial compilation.

  * SLIME support for ASDF was significantly enhanced.
    It is distributed separately from ASDF, with SLIME.
    See latest checkin from 2012-12-26.
    We recommend that in your ~/.swank.lisp you should:
    (in-package :swank)
    (defparameter *upgrade-asdf-p* t)
    (pushnew 'try-compile-file-with-asdf *compile-file-for-emacs-hook*)

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
He wa'n't no common dog, he wa'n't no mongrel; he was a composite.
A composite dog is a dog that is made up of all the valuable qualities
that's in the dog breed — kind of a syndicate; and a mongrel is made up
of all riffraff that's left over.  — Mark Twain

More information about the asdf-devel mailing list