[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
SIDE-EFFECT-FREE/STATELESS Functions
re: . . . When defining a function
named bar, one declares properties of that function and all future
redefinitions of the function [name] by putting a declare inside the
function's definition. When calling a function named bar, the
declarations attached to the definition that will be called are used.
(I inserted the bracketed "[name]" in your comments quoted above, to be
consistent with your emmendations of your previous message.)
The issue is that the Symbolics' declaration can't be a proclamation because
it doesn't apply specifically to a name for the function. It does seem a
bit of a departure from CLtL to acquire global compilation directions out
of the current binding of a function name rather than using PROCLAIM.
I see a reasonable amount of code that calls SETF on symbol-function; how
would the symbolics style declaration handle this? the same as if it had
been a DEFUN? Perhaps what is needed is something beyond DEFUN that, like
DEFVAR, will do implicit proclaims on the name as well as setting initial
values; (SETF SYMBOL-FUNCTION) would remain "primitive", like SETQ.
re: I don't think I should admit to knowing what you mean by implementation
dependent concepts like "binding" and "cell". . . .
The term "binding" to mean an assignment of value to an identifier, whether
temporary or permanent, has been around the Lisp world for decades. I don't
even think it is Lisp-world specific. Also, cells aren't especially
"implementation-dependent concepts" -- see the current discussion on the
Scheme mailing list about "CELLS" (especially re ML). Even beyond that
theoretical scope, there is a common practice in the Lisp comunity to speak
of setting a dynamic variable's value as "setting it's value cell"; rarely,
if ever, is there any point to making a distinction between the two,
regardless of how an implementation handles dynamic variables.
One interesting avenue for maintaining consistency between proclamations and
"reality" is to signal errors whenever the compiler can determine that a
proclamation is being violated. So an attempt to proclaim RANDOM "simple"
would generate an error; and a subsequent "non-simple" definition of FOO,
where FOO had been proclaimed "simple", should signal an error or warning.
Of course, not every compiler and/or interpreter is capable of enough
analysis to distinguish "simple" from "non-simple" from "unknown"; this is
in the realm of "user-friendly" rather than language semantics.
-- JonL --