[Oops — just noticed that I had sent this only to Faré, not the list.] Oh wow, that was even more of an earful than I was expecting :-)
... I've now read your syntax-control document. Before I found it, I tried to think of solutions, and came up with something very much like your Proposal 2. You say that it depends on Proposal 1 (which you had hoped to put into effect immediately), but I'm not sure about that; I think it could stand alone. Seems like it would require fewer changes to existing systems, which might make it more politically doable. WDYT? -- Scott On Thu, Feb 22, 2024 at 8:32 AM Faré <fah...@gmail.com> wrote: > Oh, and as for binding variables around files, this has subtly different > meanings when compiling a file, loading its fasl or loading its source. And > if done wrong it can easily break fasl concatenation or linking on ecl and > mkcl, where you just can't bind around the loading of individual fasls, > whereas with source loading you can't not bind, so now the user is > responsible to make sure his code works both ways and the binding only > really matters at compile-time—which kind of is already a development > constraint, just unarticulated, unenforced, and undetected until a subtle > bug hits someone. > > In the end you can only protect the developer from himself so much, when > you can't change the semantics of CL itself across twenty implementations > many unmaintained. > > On Thu, Feb 22, 2024, 11:16 Faré <fah...@gmail.com> wrote: > >> In the past, to introduce changes a fraction as compatibility-breaking >> (e.g. making utf-8 the default, or changing the internals of OPERATION), I >> would write up an explanation why the change is desired that anyone can >> read, discuss on the mailing list, write the code but keep it unmerged or >> disabled, make an announcement for the intended future breaking change, go >> over all of Quicklisp with Anton Vodonosov's cl-test-grid, locate all the >> offenders there, and send patches to each and everyone, wait a year if the >> old behavior used to be officially documented and supported, only a few >> weeks if it was a forbidden internals dependency, run the test again, give >> a last warning to those who didn't merge the patches, sometimes fork the >> systems left unmaintained to a new home, then finally make the change and >> announce it. And be ready to handle all the angry authors of proprietary >> code not in Quicklisp that you failed to previously contact. >> >> For syntax-control (see my branch, that needs much love merging with >> 3.3.7), we never reached that point, if only because we were never >> satisfied with the complexity of the code (speaking for myself at least, I >> suspect for RPG also to a point, but he can opine otherwise if needed). >> There are many special variables beside *readtable* that control syntax >> (e.g. some systems try to make double-float the default—with "interesting" >> side effects to other systems compiled later, more subtle than the big >> obvious breakage when the readtable is wrong or corrupted). And users >> define more such variables as they extend the language. So now you want to >> maintain a dynamic list of symbols, some in packages not yet defined, that >> you want to track, save and restore. Next your users will want to bind the >> values of some of these variables around some systems, modules or >> components. The code is big and messy, and it isn't even obviously "the >> right thing" overall, though a lot of elements of it are, and every piece >> is needed somehow. >> >> There's also the question of whether the default readtable should be THE >> "standard" readtable (immutable on some implementations, not on others), or >> some shared mutable readtable copied from it (will break many CCL >> extensions), or from the magic initial readtable that is not standard and >> that some will mutate (the most backward compatible option, so probably the >> one ASDF should pick, though it's ugly, unless you want to wrestle some >> more with the community). >> >> Should we merge the whole messy thing that solves the entire problem? >> Only the small and clean part that is obviously right but clearly >> insufficient? Each time we make such a change, we have to pay a lot to >> overcome a big incompatibility hurdle. If the solution isn't fully >> satisfactory, then we are setting ourselves up for yet another round (or >> several) of such costly change(s). >> >> I'm out of the Common Lisp community (moved to Gerbil Scheme), but >> whoever wants to tackle this challenge for good better makes sure they (and >> the community!) are ready to pay the price for the transition, and multiple >> times so if they don't get it right on the first try. Oh, and once you take >> on the job, you'll be hated by some part of the community whether you >> subsequently make the change or don't. >> >> Good luck! >> >> On Thu, Feb 22, 2024, 10:15 Robert Goldman <rpgold...@sift.info> wrote: >> >>> I think this is still true, but... we cannot be discussing ASDF 3.2.1 >>> here. It was released almost 7 years ago, and for whatever reason Zach >>> refuses to update. The current version is 3.3.7 >>> >>> Please get a more recent ASDF and try again. I *believe* that this >>> behavior is still in place: Faré proposed the "syntax control" patch to fix >>> this, but we decided we had no easy path to introducing it, because it >>> would break other code (admittedly not of good style) that relies on the >>> old behavior of having the readtable setting leak out of one file into >>> another. See >>> https://gitlab.common-lisp.net/asdf/asdf/-/merge_requests/86 >>> >>> Any non-backwards compatible modification to ASDF -- even to the extent >>> of raising a deprecation warning -- has led to temper-tantrums in the CL >>> community... >>> >>> On 21 Feb 2024, at 22:14, sc...@sympoiesis.com wrote: >>> >>> Hi all! I just ran into something surprising. This is with ASDF 3.2.1, >>> packaged with Quicklisp. I am using Named-Readtables. I had '*readtable*' >>> set to a nonstandard readtable, then did quickload of a system unrelated to >>> the one that defines and uses that readtable. The compilation failed; after >>> I did '(in-readtable :common-lisp)' and tried again, it succeeded. >>> >>> A quick glance at the ASDF source code shows that it binds '*readtable*' >>> to a standard readtable in some cases, such as to read a '.asd' file, but >>> not in 'uiop/lisp-build/compile-file*', nor in >>> 'asdf/lisp-action:perform-lisp-compilation'. Wouldn't it make sense to do >>> that? >>> >>> -- Scott >>> >>>