[asdf-devel] Make the CL syntax predictable

Faré fahree at gmail.com
Sat Mar 29 18:47:21 UTC 2014

>> (1) guaranteeing a value of *read-default-float-format*
>> and other syntax variables when compiling a library.
>> I still argue that (1) is essential for build determinism,
>> and enabling users to change syntax at the REPL.
> Are you also considering the following use case?
> - Assume I’m developing a library for a specific Common Lisp implementation. Let’s choose LispWorks as an example, although it could be any other. (I’m just choosing LispWorks as an example because I happen to use it myself most often.) LispWorks comes with its own system definition facility, and with its own default values for pre-defined global variables in the CL package that may or may not be the same as those of other CL implementations. Since I’m also maintaining portable libraries, I prefer to use ASDF even for LispWorks-only libraries, so I don’t have to change tools on a regular basis. However, I would also like to make sure that LispWorks users can use the LispWorks system definition facility for my library as an alternative. Will it be possible to use ASDF without it messing with the default values for pre-defined global variables, so that I have a guarantee that I get the same result no matter whether I use ASDF or some other system definition facility? (I’m fine with doing extra work in the system definitions, but I’m not sure I’d be fine with adding extra headers to the lisp files.)
I admit I have only limited knowledge of LispWorks's defsystem — but
that it made me appreciate Dan Barlow's design better (though not his
implementation). Writing LW defsystem rules to process dependencies
correctly is *possible*, but by no means trivial. I don't know what
guarantees the LW defsystem does or does not provide in terms of
variable bindings — if you know it, it would be great of you to
explain what they are (or just link to a page that does, if there is
one). Indeed, if these assumptions differ from those of ASDF today or
tomorrow, it would be nice to have a simple way to declare around
wrappers that provide the alternative assumptions.

>> That's not how it works, unless you include a bit for *rdff* in the
>> name of the fasl cache directory — and since the planning is done
>> based on pathnames before the compilation happens, that should still
>> be *rdff* at the beginning of compilation. Otherwise, the build is not
>> deterministic, and two different toplevel programs will poison each
>> other's builds.
> …not even if you :force t?
If you make :force t the default, you lose incrementality, and fast
startup time for end-user scripts. If you say "things are unsafe by
default", you lose modularity and you make it impossible to distribute
scripts to end users. Either way, if you don't have a deterministic
build *by default*, easy deployment of scripts to end-users is not
possible anymore.

>>> You also have the option to fork a particular Common Lisp implementation
>> So do you. That's a non-argument that assumes you're the dictator of CL.
> Huh?!?
The common "love it or leave it" slogan is assuming the utterer owns
the domain at stake. Otherwise, why should YOU not be the one to leave
when we disagree what "love it" means?

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Think you can, or think you can't — either way, you'll be right. — Henry Ford

More information about the asdf-devel mailing list