On Fri, Mar 2, 2018 at 1:05 PM, Robert Goldman rpgoldman@sift.net wrote:
So as I see it we have three options for the *shared-readtable*
Your original option -- the "initial-ish" readtable (since we can't control when ASDF is loaded)
Usually ASDF is loaded before any significant other software is. If the user insists in modifying the initial readtable early, he's probably on to something.
My proposal: a copy of the standard readtable. We should consider what might happen in this case if ASDF is reloaded or upgraded. I don't know if option #1 has this same issue.
In either case, definitely use defvar rather than defparameter, unless you're also going to clear-registered-systems at every update.
An unmodifiable standard readtable. I don't believe that this is portably possible, is it? There's no ANSI method (unless I've overlooked something) to make a readtable unmodifiable, and there's no way to access the standard readtable portably (since it isn't required to be unique).
It's not portable for unmodifiability to be enforced, but it's certainly non-conformant to try to modify even when the implementations fails silently later rather than catches you immediately. So far as I know, only SBCL, ECL, Allegro, CMUCL make it unmodifiable. Maybe file bugs for other relevant implementations?
I believe my proposal, #2, is the most portable of all of the solutions, but I am still open to correction.
For some definition of "portable". I know that some systems rely on e.g. CCL or MCL extensions #$ or #_ — but they could be made to use the *initial-readtable* that we definitely are going to save anyway.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org A good answer is one that solves the asker's problem, not one that (necessarily) fits his expectations. Actually, if the asker has been seriously looking for a solution, and did not find any, then there's a good deal of chance that a good answer won't fit his expectations! (At least, not all of them.)