Actually, I find that there already WAS a discussion of just this issue in the ASDF manual. See the node "Pitfalls of the upgrade to ASDF 3." I have added another FAQ node to try to make this information easier to find, based on what went wrong. Review welcome.
Cheers, r
On 5/4/17 May 4 -9:59 AM, Robert Goldman wrote:
On 5/4/17 May 4 -8:54 AM, James M. Lawrence wrote:
LispWorks PE bundles an old asdf, which is loaded with (require "asdf").
Is this because LWPE is still LW 6 instead of 7?
CLISP optionally bundles asdf -- (require "asdf") -- and I would expect some Linux distributions to have that configuration in the CLISP they supply. (require "asdf") also looks in directories (including the user home directory!) for asdf.lisp, so an old version could be unintentionally loaded. My real concern is LispWorks, though.
We can't really handle clisp effectively, because as far as releases are concerned, it's dead. I realize that the code repo is active, but releases aren't being made, which means the de facto standard is now something going on 7 years old. That's not the ASDF project's fault.
Maybe this wasn't clear enough, but my communications here are on behalf of users, not me. Many -- perhaps most, perhaps nearly all -- people use asdf only indirectly through Quicklisp. I am trying to help the poor end-user who has a borked system and doesn't understand what is wrong. I would like to prevent the borkedness from happening in the first place.
Most people initialize Quicklisp in their startup file. After using the lisp image for a while, they may wish to load a system and discover that the system requires asdf3. So they load asdf3. And then everything is borked. It may be difficult even for an experienced user to discover what is wrong, much less a casual user, and next to impossible for a newcomer.
In the manual I didn't see any of the caveats you mention about the central registry. It says that asdf can be upgraded on the fly, and that's what people will expect. They don't expect that upgrading will bork the lisp image for some reason unknown to them.
I will see if I can put in a FAQ about this. Look for something soon.
The quick and dirty workaround I mentioned is not something that would be part of any real code, just something a user could do to get things unborked again, that is, to enable Quicklisp to load again.
I don't want to use *central-registry*. I'm not advocating using *central-registry*. I don't use *centry-registry* myself, except indirectly through Quicklisp. I am not insisting on weird upgrades. All I want to do is fix problems that end-users encounter.
I'm not familiar with the guts of QL, but I thought QL didn't use central registry. I thought it used its own extension to the loading process.
Best, R
On Wed, May 3, 2017 at 11:16 PM, Faré fahree@gmail.com wrote:
On Wed, May 3, 2017 at 7:10 PM, James M. Lawrence llmjjmll@gmail.com wrote:
The manual says "it is possible to upgrade from ASDF 1 to ASDF 2 or ASDF 3 on the fly", and "asdf:*central-registry* is not recommended anymore, though we will continue to support it". From the documentation it is not immediately clear that upgrading is purposefully broken.
Upgrading works. Central-registry works. Central-registry is not preserved by upgrading. And doesn't need to be, because central-registry is something you insert into a special configuration file that needs to first load the proper asdf, anyway. Whoever writes that configuration file by hypothesis knows where all the software is located. It just doesn't make sense to load the wrong asdf then configure your central-registry only then to load yet another asdf. If you do things like that you deserve to lose.
I suppose a quick and dirty workaround would be something like (setf asdf:*central-registry* asdf-2.26:*central-registry*).
That doesn't make sense, and asdf cannot guess what ancient version of asdf was moved aside. Once again, it used to try much harder to upgrade from 2.26 on sbcl and several other implementations, but that got too unwieldy to support, for no good reason.
Quicklisp's behavior of using the asdf version bundled with the implementation, if it exists, seems reasonable, at least at face value. After all, that's the version the vendors tested, and it may already be part of the image (or speedily loadable).
That part is totally reasonable indeed, and works perfectly.
Even if Quicklisp includes asdf-3.1.7, it would still try to load the bundled version first, so things would still be broken on LispWorks PE and CLISP.
Does not compute. Neither LispWorks PE nor CLISP release from 2010 provides ASDF. Quicklisp will then load its own ASDF, but that entails no upgrade. If you want a more recent ASDF on top of that provided by Quicklisp, you are going to lose anyway — instead overwrite Quicklisp's asdf.lisp with the recent one, or convince Xach to upgrade Quicklisp's ASDF to 3.1.7. Or use asdf/tools/install-asdf.lisp to make your implementation provide ASDF despite it not being provided out of the box.
If you insist on such a weird upgrade, many things may go wrong beside the *central-registry*. Yet even then you shouldn't be using the *central-registry* to begin with. Use the source-registry.
Therefore the real question is whether people should load the asdf bundled with the implementation, either on their own or through Quicklisp. If upgrading wasn't broken, things would just work and we wouldn't have to debate that question.
Upgrading is not broken. Your use pattern is broken. Don't initialize the central registry after you load the wrong asdf then load the correct one then expect things to work.
How about preserving *central-registry* when upgrading? That seems completely natural and expected to me, even apart from the fact that it happens to solve the problem at hand.
It's completely unnatural and backwards to load a wrong asdf, initialize it, then upgrade it. Please configure *after* you upgrade (and yes, *if* the configuration is for ASDF to find ASDF itself, you may have to configure that part twice; or just skip the part about loading the wrong asdf). And try using install-asdf.lisp where applicable.
Finally, please don't use the central-registry for cases like these. Use the source-registry.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org Only a fool tests the depth of the water with both feet. — African proverb