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

Should (EVAL-WHEN (EVAL LOAD) mumble) = mumble?



As far as I can tell from reading the definition of EVAL-WHEN, the form
(EVAL-WHEN (EVAL LOAD) mumble) is always equivalent to an unadorned mumble.
Specifically, if the interpreter sees this EVAL-WHEN, it will evaluate mumble
(since EVAL is specified); if the compiler sees this EVAL-WHEN, it will
process mumble in the same mode as the EVAL-WHEN form (either NOT-COMPILE-TIME
or COMPILE-TIME-TOO).  In either case, the interpreter and compiler process
mumble just as they would if mumble appeared by itself, without being wrapped
in EVAL-WHEN.  Does anyone disagree with this interpretation of the
definition?

If this interpretation of the definition is correct, then I would argue that
the definition is not the right one.  PSL has a similar notion called
LOADTIME, but its effect is different.  Specifically, (LOADTIME mumble)
instructs the compiler as follows: (1) If mumble would normally be evaluated
at compiletime, then do not perform that evaluation; (2) generate code to
evaluate mumble at load-time, even if such code would not normally be
generated.  In Common Lisp terms, assuming this macro definition,

  (DEFMACRO FOO () `(EVAL-WHEN (EVAL COMPILE) (*FOO)))

the form

  (EVAL-WHEN (EVAL LOAD) (FOO))

would NOT invoke *FOO at compile time, and WOULD generate code to invoke *FOO
at load time.  (In the PSL example I actually encountered, FOO was not a
macro, but a function flagged as implicitly EVAL-COMPILE.)

  Alan Snyder
  hplabs!snyder
-------