[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
constant folding/smashing
What about constant hash-tables? No variety of QUOTE can build
a constant hash table because there is no notation for them.
(I don't count #.(make-hash-table...) because it's so gross.)
This suggests that something like the 'purcopy' function is still
needed. However, should this be recursive in the case of hash tables?
Certainly the KEYS of ANY hash table must be thought of as constants,
because otherwise the table can become inconsistent. But I can
think of situations both where the values should also be constants
(if the table is) and where the valueshould not be constants.
Making 'pucopy' non-recursive is fine for large data structures,
like arrays, structures, strings etc., but I think most people
feel that CONSes in list structure should be handled in one fell
swoop. Perhaps a 'pucopy' function should accept a data argument
and an arbitrary number of type specifiers, indicating the
data types to recurse through.
In general I like the idea of quoted constants being read-only,
because it ensures that the semantics of a function at run-time
are apparent from its textual representation as code. If constants
are not read-only then:
(defun foo ()
'(a b c))
Really means
(defun foo ()
G00047)
(setq G00047 '(a b c))
On the other hand, I think it would be consistent to define BACKQUOTE
so that it always makes a fresh copy of its entire argument. This
is reasonable, since BACKQUOTE already has to copy its argument
down to the last comma. Die-hards who really want to avoid the
final CONSing in a BACKQUOTE could use ,'(...) to insert un-copied
structure.