[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?