[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Handling of #, (load-time-eval)
- To: franz!sail.stanford.edu!cl-compiler
- Subject: Handling of #, (load-time-eval)
- From: franz!feast!smh@ucbarpa.Berkeley.EDU (Steven M. Haflich)
- Date: Wed, 6 Jul 88 09:57:28 EDT
- In-reply-to: Sandra J Loosemore's message of Sun, 3 Jul 88 12:54:14 MDT <8807031854.AA18432@cdr.utah.edu>
From: franz!ucbarpa!cs.utah.edu!sandra%cdr (Sandra J Loosemore)
(3) Throw out #, entirely and do not provide any other similar
functionality.
But, of course, all implementations would preserve it anyway for
backward compatibility. This is a wishy-washy choice.
(4) Simply clarify that #, must appear inside of quoted structure and
that it's really not the same as #. in interpreted code.
A real problem with #, is that it's mechanism is unavailable *except*
via the reader, but some functions are composed by functions other
than the reader.
To summarize briefly the responses I got to my question about #,
usage, it appears that nearly all usages of #, could be replaced by
references to a variable initialized with DEFVAR or DEFCONSTANT. The
people who responded appeared to be well aware of this, but liked #,
syntax better because they didn't have to think of a variable name,
and thought it might be somewhat more efficient.
I don't remember whether this was mentioned explicitly, but one
benefit of #, is that it is *clearer* -- the load-time-eval form
appears at its point of use or inclusion, and not at some distant
DEFVAR. This is not a minor point.
As far as I can
tell, #, is almost never used at other than top-level in quoted
structure (that is, people use '#,(foo) but not '(... #',(foo) ...)).
Allegro's flavor implementation does use the #, mechanism inside
quoted structures. However, this is also a prime example of a program
that (almost) needs access to the magic internal token, since the
forms being compiled are generated by hairy DEFFLAVOR internal macros
and not read by the reader.
Finally, a subissue I think we need to touch upon: Should the object
returned by evaluating the form indicated by #, be read-only? I'd
argue that if we go with a proposal that restricts #, to appearing in
quoted structure, and if we accept that quoted structures are
read-only, we'd have to say Yes to this question as well.
I think that #, should only appear inside quoted structure. However,
as an extension, might we also permit the value returned by #, to be
any self-evaluating object? E.g.:
(setq foo
(1+ #,(seventh (decode-universal-time
(get-universal-time)))))
The value returned by the #, expression is always an integer, which is
always self-evaluating. The compiler could be allowed to assume that
anything returned by #, will not require further evaluation.