[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Issue: LOAD-TIME-EVAL (Version 8)
- To: Kent M Pitman <KMP@STONY-BROOK.SCRC.Symbolics.COM>
- Subject: Re: Issue: LOAD-TIME-EVAL (Version 8)
- From: David A. Moon <Moon@STONY-BROOK.SCRC.Symbolics.COM>
- Date: Thu, 2 Feb 89 11:44 EST
- Cc: firstname.lastname@example.org, Gray@DSG.csc.ti.com, CL-Compiler@SAIL.STANFORD.EDU
- In-reply-to: <890201190608.9.KMP@BOBOLINK.SCRC.Symbolics.COM>
Date: Wed, 1 Feb 89 19:06 EST
From: Kent M Pitman <KMP@STONY-BROOK.SCRC.Symbolics.COM>
I may have more to say on this later, but for now...
Date: Wed, 1 Feb 89 18:51 EST
From: David A. Moon <Moon@STONY-BROOK.SCRC.Symbolics.COM>
If two lists (LOAD-TIME-VALUE <form>) are EQUAL but not EQ, their
values always come from distinct evaluations of <form>. Coalescing
of these forms is not permitted.
But since compilers can coalesce the constant structure in forms like
(DEFUN FOO ()
(LIST (EVAL '(LOAD-TIME-VALUE (BAR)))
(EVAL '(LOAD-TIME-VALUE (BAR)))))
then distinct forms may sometimes ultimatley get coalesced anyway, so
this may look more re-assuring than it really is.
Btw, Sandra's references to "calls to EVAL" meant toplevel calls. After
all, users can't tell if EVAL is implemented recursively, or if some
internal function is used to do the recursion. The only time they ever
come in contact with the recursive nature is when they use EVALHOOK, and
there it is not EVAL, but EVALHOOK which accomplishes the recursion.
I still don't think it means anything. For example, in your FOO example
the two calls to EVAL inside the list are top-level calls if FOO was called
from something compiled, or non-top-level calls if FOO was called from
something interpreted. Does the Lisp's interactive loop count as EVAL?
What if it's executing a LOAD command, or loading a user's lisp init file,
rather than evaluating a typed-in form? I still don't think it means anything.