Upgrading/Installation Instructions Clarification

Robert Goldman rpgoldman at sift.info
Tue Jan 19 16:07:41 UTC 2021


In upgrade.lisp we see:

```
   (defun upgrade-asdf ()
     "Try to upgrade of ASDF. If a different version was used, return T.
    We need do that before we operate on anything that may possibly 
depend on ASDF."
     (let ((*load-print* nil)
           (*compile-print* nil))
       (handler-bind (((or style-warning) #'muffle-warning))
         (symbol-call :asdf :load-system :asdf :verbose nil))))
```

This suggests to me that upgrading will require finding "asdf.asd".  So 
I would have thought that this would rely on finding the source in 
`asdf/` -- where there's "asdf.asd" -- rather than the merged single 
file in "asdf.lisp".



On 19 Jan 2021, at 9:05, Wilfredo Velazquez wrote:

> Can I upgrade ASDF by simply placing the built asdf.lisp file in
> ~/common-lisp/asdf/asdf.lisp and omitting everything else? Will ASDF 
> find
> it?
>
> On Tue, Jan 19, 2021 at 9:44 AM Robert Goldman <rpgoldman at sift.info> 
> wrote:
>
>> *Warning -- opinionated rant follows!*
>>
>> On 18 Jan 2021, at 20:50, Eric Timmons wrote:
>>
>> That's not quite right. It could definitely be more friendly, but 
>> there
>> are a few ways to better control it.
>>
>> To completely prevent ~/common-lisp/ from being traversed you could 
>> put
>> an :ignore-inherited-configuration directive somewhere in the
>> CL_SOURCE_REGISTRY envvar or
>> $XDG_CONFIG_DIRS/common-lisp/source-registry.conf. But that approach
>> also would prevent the files in
>> $XDG_CONFIG_DIRS/common-lisp/source-registry.conf.d from being parsed
>> (as well as any system level config). It might be nice to allow an
>> inheritance config directive to be specified in the configuration
>> directory parsing if it isn't already (there's an implicit
>> :inherit-configuration tacked on the end of the directory based 
>> config).
>>
>> Another option is to drop a .cl-source-registry.cache file in
>> ~/common-lisp/ or one of the sub directories.
>> https://common-lisp.net/project/asdf/asdf.html#Caching-Results. ASDF
>> will stop recursing if it finds that file and just use the info it
>> contains.
>>
>> This is true, but it causes just the kind of problems I have alluded 
>> to --
>> your ASDF configuration is now smeared all over your system, and 
>> debugging
>> it becomes essentially impossible.
>>
>> I have repeatedly had to help people where I work who have put one of
>> these magical -- and invisible -- files or configurations somewhere,
>> forgotten it, and then don't understand why some aspect of their
>> configuration is misbehaving. Now I tell people *only* to configure
>> things in their lisp init files, *not* to use magical directories, 
>> and
>> *not* to use environment variables. Then if something goes wrong, you
>> know where to look for the culprit.
>>
>> Note also that if ASDF isn't configured in your lisp init file, but 
>> by a
>> config file or environment variable, *it will be configured as it 
>> loads*.
>> This means that all of your debugging tools are taken away from you. 
>> There
>> will be no tracing, because by the time you can set up a trace, the 
>> damage
>> will be done.
>>
>> asdf:*central-registry* is terribly inefficient, *but it is simple* 
>> and *it
>> can be inspected when things go wrong*. None of these other schemes 
>> share
>> that feature. I have tried to trace the control flow for interpreting 
>> the
>> configuration DSL and it's a mass of twisty passages all exactly 
>> alike.
>> Lots of key functionality is in variables, or in anonymous lambdas, 
>> making
>> tracing effectively impossible. (Adding configuration logging would 
>> be a
>> big help)
>>
>> So -- if you are at Google or some other shop where you have a 
>> zillion
>> systems coming together, yes, *central-registry* is too slow, and 
>> will
>> kill you. For most of us, though, using one of the alternatives is
>> premature optimization.
>>
>> I am a strong believer that the only way to keep track of the 
>> burgeoning
>> complexity of today's systems is to *localize* and *simplify*
>> configuration, rather than disperse it. For some reason, the 
>> dispersion
>> faction is winning the design game, though. I'm not sure why -- 
>> perhaps
>> there's some notion of tidiness and elegance that encourages all of 
>> these
>> configuration layering (look how elegant! You can override things or 
>> accept
>> the default!) and dispersion (there's an individual config file for 
>> every
>> purpose, instead of one monster -- and I admit my .emacs is a thing 
>> to
>> strike fear in the heart).
>>
>> Also not a fan of invisible config files. Yeah -- it's ok to have dot
>> files in your home dir so that you don't get overwhelmed, but why is 
>> it a
>> good idea to hide the file in your repo that configures the CI so 
>> that ls
>> won't show it to you?
>>
>> Finally, *everything* will break, so make sure you know how the poor 
>> user
>> will debug it when it does. Make sure things are traceable in CL. Log
>> things. Make your error messages understandable. Lots of ASDF doesn't
>> follow this principle, and I would love to move towards making it 
>> easier to
>> diagnose and debug.
>>
>
>
> -- 
> Wilfredo Velázquez-Rodríguez


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/asdf-devel/attachments/20210119/68a4f837/attachment-0001.html>


More information about the asdf-devel mailing list