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

Re: Issue: LOAD-TIME-EVAL, Sub-Issue: Displacing macros

> That leaves only system displacement. And I've always felt displacement was
> so controversial that no user base would put up with it simply being dumped
> on them. Rel6 of Symbolics Genera decided to displace just a few forms [LET,
> LAMBDA, DO, ...] and it caused massive outcries from customers because it
> broke all kinds of code. Symbolics withdrew the `feature' in Rel7.
> The only way I can imagine people living with it is if they grew up with it,
> but since it's a given that people in other environments didn't grow up with
> it, then most portable code [I suspect] is not ready to deal with it.

We inherited an implementation that uses displacing macros, and it has
caused some problems for a few users, but there haven't been "massive
outcries".  I can see, though, that this is probably not the best way to
do things.

> But this whole sub-issue aside, all we're really saying is that LOAD-TIME-VALUE
> should not be done by displacing.

But other things can be?  I think we should be consistent -- either
displacement is a valid implementation technique or it isn't.  I don't see
how the case of evaluating the expression in a LOAD-TIME-VALUE form is
fundamentally different from the more important question of when and how
many times a macro expander is invoked.  If your interpreter
implementation does a pre-pass, then you want to do both during the
pre-pass, while a displacing macro implementation would want to use the
same displacement mechanism for both.