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

Re: issue CONSTANT-CIRCULAR-COMPILATION, version 4



Regarding Sandra's comment on the uselessness of a declaration
for circular constants:  I was thinking of something to declare
NON-circular constants to save the compiler and loader's effort.
The difference is that such a declaration could be considered
optional.

Regarding Kent's comments:

"constants being dumped are generally anonymous"

Yes, I agree.

Kent comments on the interaction of macros with a declaration
covering all literal constants in a lexical scope.
Once again he is right in the sense that there can be interaction.  

That is an issue that I didn't consider properly before throwing
out my suggestion.  A couple of comments:

1) It seems to me that a construct informing the compiler about
circularity with a lexical scope (such as a declaration) is strictly
more powerful than any flag.  A flag would presumably only apply on
basically a "per top level form" granularity.  Therefore, if a
declaration won't work, a flag won't work.

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

(QUOTE (A B C) :CIRCULAR NIL)

or something like that.  This would deal with Kent's points.

At first I didn't like this at all on the grounds that it would
make people write extra crud all over their constants to make
the compiler and loader run faster.  On second thought it appeals
to me much more.

Suppose the default value of the option supports circularity:
It may be that putting the option in explicitly would only
be important for a few constants that are large.  I think
that wouldn't be so bad.

Suppose the default option does NOT support circularity:
One probably knows when one is making a potentially circular constant.
This is almost always done by a program, so it is easy to
specify the option without crudding up source code.