Forum: Public Review
References: Moon's public review comment #2 (X3J13/92-3202)
Edit history: 20 Dec 1992, Version 1 by Loosemore
08 Jan 1993, Version 2 by Loosemore (comments from Moon)
12 Sept 1993, Version 3 by Loosemore (add second proposal)
Status: Proposal REMOVE-OLD-KEYWORDS failed 3-6-0, March 1993
Proposal X3J13-MARCH-1993 passed 6-1, March 1993
The language in draft 12.24 about the relationship between
the new EVAL-WHEN keywords :EXECUTE, :COMPILE-TOPLEVEL, and
:LOAD-TOPLEVEL and the old, deprecated keywords EVAL, COMPILE, and
LOAD is confusing. (For example, it's inconsistent about what
EVAL means when not at top level.) The compatibility argument
for retaining two sets of keywords with slightly different
meanings is outweighed by the resulting confusion.
Eliminate all mention of the old keywords EVAL, COMPILE, and LOAD
in connection with EVAL-WHEN.
Generalize the use of the old keywords; define that eval-when always
treats eval the same as :execute, compile the same as :compile-toplevel,
and load the same as :load-toplevel.
Adopting this suggestion would shorten the specification and remove
an inconsistency. There are so many incompatibilities between
CLtL1, CLtL2, and the draft standard that it's pointless to try to
allow for a modeless implementation that is simultaneously compatible
with all of them.
Moon says he's not aware of any implementations whose current releases
don't support the new keywords.
Cost to implementors:
Probably small; implementations could continue to support the old
keywords as an extension.
Cost to users:
This is an incompatible change, but one that is easy to detect. A
good implementation should complain about unrecognized EVAL-WHEN
Making the standard simpler is a good thing.
The dictionary entry for EVAL-WHEN is the only place affected.
(The discussion of EVAL-WHEN in the concept section relating to
file compilation uses the new keywords exclusively.)
I like EVAL-WHEN-NON-TOP-LEVEL:REMOVE-OLD-KEYWORDS (version 1).
Moon suggested (in his public review comment) that another way to
resolve this problem would be to define the behavior of the old
keywords to be exactly the same as that of the new keywords.