[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Proposal for EVAL



   Date: Wed, 20 May 92 16:14:17 -0400
   From: "Aubrey Jaffer" <jaffer@martigny.ai.mit.edu>

      Date: Wed, 20 May 92 13:47:10 -0400
      From: "Guillermo J. Rozas" <jinx@martigny.ai.mit.edu>

      *   This constraint is so stringent that one of the most important
      *   uses of EVAL, namely implementing R4RS macros, will only be possible
      *   with first-class environments!

      Not true.  INTERACTION-ENVIRONMENT can be trivially supported by
      dialects such as MacScheme and Indiana's Scheme 84 without any support
      for what is usually called first-class environments.

   Agreed.  But R4RS macros will require INTERACTION-ENVIRONMENT and
   saying that "no eval" implementations don't need it then leaves those
   implementations without the means to implement R4RS macros and
   many any other practical uses of EVAL.

I don't understand why you keep saying this.  You have repeated this
statement several times without any justification to convince me that
it is so.

The implementation of R4RS macros that I developed and distributed
does not require anything at all like INTERACTION-ENVIRONMENT.  In
fact, it supplies its own EVAL, which deliberately disallows
top-level definitions, because the R4RS specification says that it is
an error for an macro expander expression to perform them.

   SLIB's syntactic closure macro code (which to my knowledge is the only
   available implementation of R4RS high level macros) does not
   distinguish between systems which can introduce macros dynamically and
   those which can't.  It uses one argument EVAL.  If there are other
   R4RS macro implementations I would like to know if they distinguish
   between dynamic and non-dynamic macro introductions.

There are two other macro implementations, one for each of the other
two low-level macro proposals.  One of them is available for ftp from
altdorf, the other from somewhere at Indiana U.; I have a copy of the
latter if you need one.  I don't know if they distinguish these
introductions.

      *    Note: It is actually this property that causes my dislike of EVAL.  I
      *    have no problem with an EVAL which can not modify the environment of
      *    the executing program.

      That is precisely the point of NULL-ENVIRONMENT and
      SCHEME-REPORT-ENVIRONMENT, which are essential while
      INTERACTION-ENVIRONMENT is not.

   Since you are saying that INTERACTION-ENVIRONMENT is so easy to
   implement I am now wondering if NULL-ENVIRONMENT and
   SCHEME-REPORT-ENVIRONMENT are useful enough to include.  Could someone
   give some examples of practical uses of EVAL in these environments
   which could not be satisfied by INTERACTION-ENVIRONMENT?

I believe that SCHEME-REPORT-ENVIRONMENT is useful, since it is a
"pure" portable environment for people who want their programs to
work the same way across implementations.  Since the report mandates
the existence of this environment anyway, it does no harm to supply it
in this form.

      *      (INTERACTION-ENVIRONMENT)				procedure

      *      This procedure returns a specifier for an environment that contains
      *      implementation-defined bindings, typically a superset of those listed
      *      in the report.  The intent is that this procedure will return a
      *      specifier for the environment in which the implementation would
      *      evaluate expressions dynamically typed by the user.

      *   Since not all implementations are interactive, I don't think this is
      *   the proper criterion for describing this environment.  How about the
      *   environment into which scheme code is LOADed.  This brings up another
      *   point.  LOAD is intimately connected to EVAL.  I think you may need to
      *   refine the definition of LOAD as well.

      You are right.  I had forgotten that LOAD had remained in the report.
      On the other hand, any implementation that supports LOAD is implicitly
      interactive, since the combination of READ, WRITE, and LOAD gives you
      a rudimentary REPL.

   Now you have me worried.  Is LOAD going away?  Even as lowly a
   language as C has the ability to include files.  I consider the IEEE
   spec a toy without some ability to include files.  There is not much
   point to vicinity if there is no LOAD.  I think that the LOAD
   specification could be made weak enough to allow it act as INCLUDE
   (All load files static during execution/compilation); this change
   would take away its ability to implement EVAL and REPL.

As far as I know, no one has proposed removing LOAD from the report.