Re: Is DEFCONSTANT broken?



On Jun 23, 3:20 pm, Duane Rettig <du...@xxxxxxxxx> wrote:
On Jun 23, 2:40 pm, Scott Burson <FSet....@xxxxxxxxx> wrote:
I have long thought DEFCONSTANT is
not as useful as its inventor(s) probably hoped.

That's because you're thinking of defconstant as providing some sort
of "protection", which it does not.

There's that, but there's also the issue raised on the SBCL page
someone in this thread linked to, which is that it arguably would be
better if it didn't assign a new value on repeated evaluation (i.e. it
should be more like DEFVAR).

Back to your point, no, I'm not into bondage either, but I do
appreciate helpfulness. For example, I could imagine an
implementation noting cases where the compiler has integrated a
declared constant into a compiled routine, in such a way that it could
e.g. warn you, when loading a fasl file, if the current value of the
declared constant differs from the one the function was compiled
with. I don't know if the spec should have mandated such helpfulness,
but I think DEFCONSTANT would be more useful if at least the high-end
implementations did stuff like that.

And thirdly, I'm inclined to agree with Ron that the sentence of the
spec he quoted is unfortunate: "An implementation may choose to
evaluate the value-form at compile time, load time, OR BOTH [emphasis
added]." I think it should have to be evaluated at compile time,
period, and Ron has given a good argument as to why.

All this is off the cuff, though, and I could be persuaded otherwise.
I just know that over the years I have made little use of DEFCONSTANT.

-- Scott
.



Relevant Pages

  • Re: Blowfish, and a question about DEFCONSTANT
    ... > of DEFCONSTANT, or that of SBCL. ... compile time, load time, or both. ... So SBCL is complaining here about 'uninterned ...
    (comp.lang.lisp)
  • Re: Is DEFCONSTANT broken?
    ... immutability ... but I think DEFCONSTANT would be more useful if at least the high-end ... evaluate the value-form at compile time, load time, OR BOTH [emphasis ...
    (comp.lang.lisp)
  • Re: clisp: COMPILE-FILE needs two LOADs?
    ... not being available at compile time, ... (if (and (constantp arg env) ... now that it's been loaded once [and thus the DEFCONSTANT ...
    (comp.lang.lisp)
  • Re: defconstant/compile-file interaction
    ... > Reading the HyperSpec on defconstant, ... in the HyperSpec, implementations can choose exactly when to evaluate ... form at compile time, it follows that the value must be computable at ...
    (comp.lang.lisp)
  • Re: creaping coupling......
    ... In C++ it would be trivial to break that source code dependency, ... When you compile a .java module, ... In Java and C# it's asserted at compile time. ...
    (comp.object)