#

## Issue STEP-MINIMAL Writeup

    Issue:        STEP-MINIMAL
    Forum:	      Editorial
    References:   STEP (p441)
    Category:     CLARIFICATION
    Edit history: 04-Mar-91, Version 1 by Pitman
    Status:	      For X3J13 consideration

    Problem Description:

      What is the minimal interpretation of STEP?  Specifically, must it
      pause for some user interaction, or can it just proceed without
      pausing in implementations (probably `compiled-only' implementations)
      which do not choose to implement this feature?

      In particular, are either of the following implementations valid?

      (DEFMACRO STEP (FORM) `(PROGN ,FORM))

      or

      (DEFMACRO STEP (FORM)
        `(LET ((VALUES (MULTIPLE-VALUE-LIST ,FORM)))
           (FORMAT T "~&~S => ~{~S~^, ~}~%" ',FORM VALUES)
           (VALUES-LIST VALUES)))

    Proposal (STEP-MINIMAL:PERMIT-PROGN):

      Clarify that it is permissible to implement (STEP x) as (PROGN x)
      in implementations which do not wish to provide more elaborate
      functionality.

      Rationale:

      For a delivery Lisp, this would be a minimal amount of work.

    Proposal (STEP-MINIMAL:REQUIRE-PAUSE):

      Clarify that (STEP x) must, at minimum, pause in some way that permits
      user intervention.

      This also implies that in implementaions which do have a query loop,
      some form of query must occur even for constant forms, like (STEP 5).

      Rationale:

      Users who introduce STEP into a program might do so on the assumption
      that execution will not proceed beyond that point (e.g., into some
      dangerous code that follows) without offering them a way to intervene
      first.

    Current Practice:

      Symbolics Genera requires intervention.

      Symbolics Cloe Runtime (the part that runs on the 386) behaves like PROGN
      in the example I tried (a couple of nested arithmetic operations).

    Cost to Implementors:

      REQUIRE-PAUSE:  Probably none.  If there are any minimalist
       implementations which do not currently require a pause now, they
       would need a very small amount of additional code.

      PERMIT-PROGN:  None.

    Cost to Users:

      None.  This is a debugging feature that affects -how- Lisp is used in
      subtle ways, but is not likely to be present in stable code so wouldn't
      have a direct cost.  It might be argued that there was a slight cost
      to PERMIT-PROGN for users who wanted the pause and didn't get it in
      some implementation; there is also a risk of larger cost with
      PERMIT-PROGN of users who expect a pause and don't get it and fall
      through to code they didn't intend to run.

    Cost of Non-Adoption:

      Unclear specification.  Implementors of certain implementations won't
      know what to do.  Users won't know what to expect.

    Benefits:

      See above.

    Aesthetics:

      Probably negligible.

    Discussion:

      Pitman has a slight preference for REQUIRE-PAUSE, but supports any
      interpretation that makes this clear.

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