[asdf-devel] cmucl upgrade of asdf works (somewhat)

Faré fahree at gmail.com
Wed Jan 8 06:10:44 UTC 2014

An innocuous-looking change suggested by rpgoldman,
of not providing a default initform for the selfward-operation slot,
led after testing to fixing a few innocuous bugs in asdf,
but also to a better understanding of the issues with CMUCL and upgrade.

After the innocuous change, tests failed on CMUCL that didn't;
some of it was bugs in ASDF that had been papered over by that initform:
things that shouldn't have been selfward-operation were,
and now had no initform — that was easily fixed.
Then, there was a CMUCL bug, whereby sometimes,
for reasons not understood yet deterministic and easy but not simple to trigger,
some operations would be created without an initialized selfward-operation slot.
This was worked around by noticing that selfward-operation was meant to be
an :allocation :class slot, but that option wasn't inherited by slot
and needed to be explicitly specified every time the slot was specialized
(no doubt because trying to inherit the option would require a non-trivial
decision procedure in case of conflict between multiple super-slots);
fixing ASDF to do the right thing papered over that CMUCL bug.
(to reproduce, checkout and make t l=cmucl t=test-encodings.script)

While we were experimenting with CLOS and CMUCL, we tried to
remove the #+cmu declaim optimize (not sure why it was ever there),
and/or add a #+cmu (setf c::top-level-lambda-max 0). That didn't help
(yet I removed the declaim at rtoy's suggestion), but along the way,
we noticed that upgrade works from 3.0.1, 3.0.2, 3.0.3, and
fails from 2.32 and earlier. The issue is that defclass component
has a renamed a slot, and its subclass system is invalidated,
but CMUCL somehow fails to finalize it again before it's next used.

The good news is that not only have we identified two CMUCL bugs,
we have established to upgrade works from 3.0.1 to 3.0.3,
which is all that matters, really, since CMUCL updates its ASDF frequently.
And we know what to do to avoid more upgrade woes on CMUCL: avoid
incompatible slot definitions in classes and/or superclasses.

I changed our tests to upgrade versions in reverse chronological order,
which is more relevant, and disabled older versions when using CMUCL.
I also bumped *oldest-forward-compatible-asdf-version* to 2.33,
since we don't have a method on update-instance-for-redefined-class
to account for the renamed slot.

That leaves the upgrade issue found by cl-grid-test on CCL with cl-l10n
and some other systems.

wow. such procrastination. much bugfix. very robustified. wow.
All because rpgoldman read the source and wanted a tiny cleanup.

In other news, still no date set for the walkthrough of ASDF sources
on Google hangout; since rpgoldman is the primary audience,
we're waiting for his schedule to open up.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
"I believe that sex is one of the most beautiful, natural, wholesome things
that money can buy." — Steve Martin

More information about the asdf-devel mailing list