Upgrading/Installation Instructions Clarification
Robert Goldman
rpgoldman at sift.info
Tue Jan 19 14:44:51 UTC 2021
**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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/asdf-devel/attachments/20210119/e6235ebe/attachment.html>
More information about the asdf-devel
mailing list