[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
LET-CONSTANT [or "Anonymous Constants"]
- To: labrea!Moon%STONY-BROOK.SCRC.Symbolics.COM@labrea.stanford.edu
- Subject: LET-CONSTANT [or "Anonymous Constants"]
- From: edsel!bhopal!jonl@labrea.stanford.edu (Jon L White)
- Date: Mon, 3 Aug 87 22:57:55 PDT
- Cc: bhopal!eb@labrea.stanford.edu, labrea!barmar%Think.COM@labrea.stanford.edu, labrea!common-lisp%sail@labrea.stanford.edu
- In-reply-to: David A. Moon's message of Mon, 3 Aug 87 16:18 EDT <870803161813.4.MOON@EUPHRATES.SCRC.Symbolics.COM>
A compiler can figure out that a local variable isn't being setq'd, and
hence can propogate through the binding as a constant literal *providing*
that it can determine that the form it is being bound to is a constant.
Admittedly, that seems to be the thrust of the messages so far -- does
common lisp need a local constant declaration for variables -- and I
think the answer is, as you phrase it, "no, because any information that
such a declaration provides can equally well be discerned mechanically
by the compiler."
But I see the need for a local constant declaration for random expressions
apart from the issue of properties of program variables. "Anonymous
Constants", if you will. Consider for example Interlisp's [special-form]
function CONSTANT:
(let ((x (constant `(JonL-phone-no ,(call-up-bell-tel-co)))))
(check-phone-book x)
(broadcast-to-friends x (constant (figger-out-broadcast-routing)))
x)
Without the very-local "declaration" provided by 'constant', the compiler
would be obliged NOT to propogate the binding value of x, and not to
elide the runtim calls to 'call-up-bell-tel-co', 'list', and the totally
random 'figger-out-broadcast-routing'. [And also not to create the list in
a static, or read-only area, etc.]
Using 'constant' rather than #. is more of an issue in Interlisp style
-- the "residential" style as opposed to the EMACS style -- but I don't
think it should be ignored in CL. In fact, a later addition to Interlisp
was 'loadtimeconstant', which is a functionality that has been under active
discussion on this mailing list in recent weeks.
-- JonL --