On Sun, Mar 16, 2014 at 11:18 AM, Robert P. Goldman rpgoldman@sift.info wrote:
PROPOSED NEXT STEPS:
- A clear proposal for this modification be made. Right now the
details of the proposed modification are wrapped in a fairly opaque discussion. The discussion is framed in terms that are either too vague "Make the CL syntax predictable" or too specific -- very particular proposals about how variables will be bound. By now the discussion is also "protected by volume" against people who want to join the discussion, but weren't parts of it from the beginning.
I opened this bug with links to the current discussion on gmane: https://bugs.launchpad.net/asdf/+bug/1293325
- The proposed change should be modified to operate only in a "strict
mode", allowing existing legal CL code to continue to work.
Agreed, and until the dust settles, "strict mode" cannot be the default. I'd argue it should become the default eventually (i.e. next year).
I propose that individual systems be allowed to proclaim that they should be operated on in strict mode, or cannot be used in strict mode.
"strict mode" would be available as a local declaration: a system could specify that it should be compiled and loaded with readtable hygiene, and that would *always* happen when it is operated on.
The library user would also be allowed to specify a global strict mode setting, and this setting would be applied in some way like the following (this is a tentative proposal):
a. systems that do not specify strict or non-strict mode would be compiled in strict mode if the user so specifies. This would lead to errors in some cases, but they would be errors that the user wants to see.
b. If the caller specifies strict mode, it will be an error to depend on systems that want to be compiled in non-strict mode. This would achieve the safety that you wish to see.
Unhappily, strict mode is a global flag: the question is "which readtable is this system going to be read with?". The only reasonable answer is: the readtable it was meant to be read with, which the author knows, and should be the standard readtable by default, unless explicitly overridden by the author. The backward-compatible (if it's not backward, it's not compatible) is "whichever readtable was active at the time", with sometimes comical consequences, especially when the user was using a non-standard one at the REPL.
- Getting this right will require much testing and experimentation.
It will not appear in the next ASDF release.
Indeed, this is not 3.1.1 material at all. Hopefully, disabled by default, for 3.1.2, and enabled in a year in 3.2.1 — or whatever you call the next releases.
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org I hold that America, Champion of the World is a betrayal of its humble beginnings as One Nation Underdog.