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

Re: Multiple copies of functions



I think it is reasonable to allow #'FOO to allocate new structure, and also to
require that SYMBOL-FUNCTION does not. 

I think it would be unfortunate to extend the loophole in EQ-referential
transparency currently allowed to numbers and characters to other data types,
especially since EQL-transparency still holds. 

The invariant in question is:

(EQL X (PROGN (SETF <place> X) <place>) )

for side-effect free <place> (when legal, e.g., that <place> admits to 'holding'
X.) Allowing SYMBOL-FUNCTION to allocate new structure that is not
EQL-equivalent would make this fail for X = #'FOO and <place> = (SYMBOL-FUNCTION
y). 

Also, for side-effect free  generalized variable <place>, it is generally true
that (EQL <place> <place>).

However #'FOO is not a generalized variable, and #' is not an accessor, despite
its similarity to '. 

Some possibilities 
*  require that (EQ (SYMBOL-FUNCTION 'FOO) (SYMBOL-FUNCTION 'FOO)) 
*  require that they be EQL. This is slightly less burdensome on implementations
where they are in fact not EQ.

I think we can still allow implementations to create new (non-EQL) structure for
#'FOO even when the lexical environment might be null, since it doesn't violate
any other invariants. 

- - - - 
Re: NOTINLINE:  the presumption in at least a couple of cleanup items has been
that by default user-DEFUNed functions are NOTINLINE and Common Lisp functions
are presumed to be potentially INLINE. Would you change these defaults?