[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: issue QUOTE-MAY-COPY, version 2
- To: Jeff Dalton <jeff%aiai.edinburgh.ac.uk@NSS.Cs.Ucl.AC.UK>
 
- Subject: Re: issue QUOTE-MAY-COPY, version 2
 
- From: sandra%defun@cs.utah.edu (Sandra J Loosemore)
 
- Date: Sat, 31 Dec 88 14:59:59 MST
 
- Cc: Jon L White <@sail.stanford.edu:jonl@lucid.com>,        sandra <sandra%defun@cs.utah.edu>, KMP@scrc-stony-brook.arpa,        cl-compiler@sail.stanford.edu
 
- In-reply-to: Jeff Dalton <jeff%aiai.edinburgh.ac.uk@NSS.Cs.Ucl.AC.UK>, Sat, 31 Dec 88 18:20:56 GMT
 
> Date: Sat, 31 Dec 88 18:20:56 GMT
> From: Jeff Dalton <jeff%aiai.edinburgh.ac.uk@NSS.Cs.Ucl.AC.UK>
> 
> Could it be that something like the following might return NIL?
> 
>    (let ((a (gensym)))
>      (eql (funcall (compile nil `(lambda () ',a)))
>           (funcall (compile nil `(lambda () ',a)))))
> 
> Or even
> 
>    (let ((a (gensym)))
>      (eval `(eql ',a ',a)))
Rather than making an exception for gensyms, I'm inclined to believe
that *all* sharing of structures within an expression passed to EVAL,
a function passed to COMPILE, or the entire contents of a file
compiled with COMPILE-FILE ought to be preserved.  I don't think it
would be unreasonable for your first example to return NIL, but I
think the second one ought to return true (regardless of whether the
value of A is a gensym or some other kind of object).  
This really falls under issue CONSTANT-CIRCULAR-COMPILATION, although
both of the existing proposals on this issue say that sharing is not
required to be preserved (by analogy with *PRINT-CIRCLE*, which is
only required to detect circularity and not sharing).  We now seem to
be moving away from the idea of COMPILE-FILE treating constants like
PRINT, however, so maybe it's time to consider this as an alternate
proposal. 
-Sandra
-------