[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
issue LOAD-TIME-EVAL
- To: cl-compiler@sail.stanford.edu
- Subject: issue LOAD-TIME-EVAL
- From: alarson@src.honeywell.com (Aaron Larson)
- Date: Fri, 6 Jan 89 17:00:45 CST
- In-reply-to: Sandra J Loosemore's message of Tue, 3 Jan 89 15:28:30 MST <8901032228.AA06041@defun.utah.edu>
- Posted-date: Fri, 6 Jan 89 17:00:45 CST
I'm somewhat perplexed by the following paragraph:
Implementations must guarantee that each reference to a
LOAD-TIME-VALUE expression results in at least one evaluation of its
nested <form>. For example,
(CONS #1=(LOAD-TIME-VALUE (COMPUTE-IT)) #1#)
must perform two calls to COMPUTE-IT; although there is only one
unique LOAD-TIME-VALUE expression, there are two distinct references
to it.
I believe I understand the question being addressed, but I've never seen
anything in CLtL addressing the issue of shared list structure in evaluable
code, i.e. does'n (EQ #1=(CONS 'A 'B) #1#) return NIL? What would permit
the compiler of LOAD-TIME-VALUE to colapse the two calls? Is this intended
to distinguish LOAD-TIME-VALUE from QUOTE (ref: (EQ '(A) '(A)) => ??)? I
was under the impression that the only loophole permitting the compiler to
copy/substitute otherwise non EQ forms was with regard to QUOTE. Is:
(EQ (LOAD-TIME-EVAL '(A)) (LOAD-TIME-EVAL '(A)))
permitted to return T because of the quoted structure, or required to
return NIL because of the statement about EVALing the form twice?