[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: issue CONSTANT-CIRCULAR-COMPILATION, version 4



    Date: Thu, 26 Jan 89 09:31:32 PST
    From: cperdue@Sun.COM (Cris Perdue)

    ... One could add an option to QUOTE as an alternative, e.g.:

    (QUOTE (A B C) :CIRCULAR NIL)

    or something like that. ...

I don't think I buy this idea, but I do admit to getting quite a
chuckle out of it. It's very original.

Aside from some aesthetic objections, and the fact that you're changing
one of the most fundamental functions in all of Lisp in a way that
would probably make people queasy, the main serious objection
is that it doesn't interface to ' well. To get any benefit, you'd
be forced to convert most quoted constants to be written long-hand,
and drastically pessimize code readability.

If you don't make it the default, then the presence of #= and ##
just invite people to lose.

If you change ' to conspire with #=, ##, #., etc. and make ' expand
into something different when they are present, you'll probably hear
 from an entire community you never knew about who does embedded
languages where 'X is not interpreted by Lisp at all, and where
(QUOTE ... :CIRCULAR NIL/T) would not be a happy thing for the embedded
language to come across. Interdialect compatibility [eg, Scheme<->Lisp
or Zetalisp<->Common-Lisp] are the best examples of this I can think
of, but I've seen other uses.

But as an aside, I do note one benefit of your proposed change: it
would make the problem of side-effecting quoted constants very apparent.
After all, it would be easy to explain to people how things like:

 (LET ((X (QUOTE (A) :CIRCULAR NIL)))
   (RPLACD X X))

could lead to trouble! :-)