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

issue LOAD-TIME-EVAL



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?