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


I generally favor the COMPILER-LET-CONFUSION:REPAIR proposal, however
I have a couple of comments and questions.  Also of course I would want
to see the typo that BarMar found fixed.

What is the interaction between proposals COMPILER-LET-CONFUSION
and DEFINE-OPTIMIZER?  Neither proposal says anything about that
as far as I can see.  I believe the body of a optimizer must be
executed in the same dynamic environment as the body of a macro.

      Cost to Implementors:

	In interpreters which do not do a semantic-prepass, it is necessary
	to fully macroexpand the body. 

This is not true.  A possible implementation technique for such
interpreters, in fact the one I would use, is to save the COMPILER-LET
bindings in a slot in the interpreter's lexical environment in the form
of an alist, and to make the MACROEXPAND-1 function bind those bindings
with PROGV around its call to the macroexpander.  Using this technique
instead of fully macroexpanding the body deals with some of the
objections to the REPAIR proposal, I believe.  Also promoting this
technique in the proposal would remove the need for the discussion
section to address the side-issue of whether code analyzing programs can
or cannot be written portably (an important issue in its own right, but
not part this one).

    Current Practice:
     Some implementations have implemented the description in CLtL. 
     Users of those implementations (quite reasonably) can't figure how to 
     use COMPILER-LET and so don't use it much.

     Some implementations (the ones from which COMPILER-LET originally came)
     continue to use their pre-CLtL semantics. These semantics are useful, though
     incompatible with CLtL (which they largely consider to simply be in error).

Could you be more explicit about this?  I was unable to figure out what you
are talking about, even after twice reading the introductory portion of the
proposal and the writeup in CLtL.  I believe Symbolics Genera is one of those
implementations from which COMPILER-LET originally came and at the same time
implements COMPILER-LET exactly as CLtL specifies, so I must be missing some
important distinction.  I'd like to see a precise description of these two
competing semantics and I'd also like to know which, if either, of them is
compatible with the REPAIR proposal.