[asdf-devel] Fixing asdf-sytem-connections

Faré fahree at gmail.com
Sun Mar 9 17:52:22 UTC 2014

>> Frankly, the whole idea is bunk. A build system ought to be
>> predictable, reproducible, and minimize surprise.
>> asdf-system-connections, as it stands, is not great in this regards,
>> but at least does not disrupt the internal dependency model of ASDF;
>> it stands on top. Your proposed extension requires subverting basic
>> invariants of ASDF internals.
> Well, I think it has some use, though now in the Quicklisp era it's less
> important, and that is to define an optional dependency for something that's
> incidental to the main system. For example, one of my projects (Antik)
> defines units as part of a large system for doing science/engineering math.
> As a convenience, it will  use the degree symbol. In order to get the degree
> symbol, I use cl-unicode. This is an incidental use of one (big) system for
> the occasional (cosmetic) augmentation of another. Most people will not care
> about units at all, and so loading cl-unicode grows the system mostly
> unnecessarily, and adding a new user-visible system definition complicates
> users' mindspace for a mostly unused benefit (and imagine you have 3
> optional definitions like this - then you would need to define 7 new systems
> to capture each combination). The alternative is to give up on the degree
> symbol, but it is nice to have it when you use degrees, and easy (one line
> of source code) to add if cl-unicode is present.
In such cases, I would bite the bullet and always use the other system.
RAM is quite cheap, these days, as compared to Lisp program size, and
more importantly, to human mindspace.

Yes, the combinatorial explosion of dealing with all these options is awful.
But having to write it down as combination systems only makes you explicitly
aware of the complexity that is implicit in the whole scheme, and that you
have to be aware of anyway to debug it. If that complexity is too much for
you to deal with, hiding it under the carpet is only making it an attractive
nuisance whereby you'll take more complexity than you're ready to deal with.
Note that if the concerns are separable, you only need n combined systems,
not -1+2^n — but even that might be too much.

> The old Lisp machine (Symbolics) had an option in the defsystem form
> :load-when-systems-loaded, which allowed you to add on modules/files to be
> loaded when certain other specified system(s) were loaded, but would not
> force the load of those systems. This worked quite well and was very nice
> for a case like this.
Those were days of memory-constrained proprietary systems,
when legal and technical reasons prevented you from loading all the code.
Unless you're targetting handheld devices, I wouldn't bother.
Or, if it DOES bother you, you might want to embrace the complexity.

PS: in this particular case, I don't see why you need cl-unicode
to support just one character. You can just add a constant in your program.
"°" or #\° or (code-char 176) is not that hard to write.

> [Yes, I still have the full set of Symbolics manuals on my shelf.]
I only had the .ps.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Blaming the prince of the fools should not blind anyone to the vast
confederacy of fools that made him their prince.

More information about the asdf-devel mailing list