#

## Issue EVAL-WHEN-OBSOLETE-KEYWORDS Writeup

    Forum:		Public Review
    Issue:		EVAL-WHEN-OBSOLETE-KEYWORDS
    References:	Moon's public review comment #2 (X3J13/92-3202)
    		EVAL-WHEN
    		Issue EVAL-WHEN-NON-TOP-LEVEL
    Category:	CHANGE
    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

    Problem description:

      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.

    Proposal (EVAL-WHEN-OBSOLETE-KEYWORDS:REMOVE-OLD-KEYWORDS):

      Eliminate all mention of the old keywords EVAL, COMPILE, and LOAD
      in connection with EVAL-WHEN.

    Proposal (EVAL-WHEN-OBSOLETE-KEYWORDS:X3J13-MARCH-1993):

      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.

    Rationale:

      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.

    Current practice:

      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
      keywords, anyway.

    Aesthetics:

      Making the standard simpler is a good thing.

    Editorial impact:

      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.)

    Discussion:

      Moon says:
        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.

Copyright 1996-2005, LispWorks Ltd. All rights reserved.