From: Peter V. E. <pva...@de...> - 2001-02-03 21:54:07
|
On Fri, Feb 02, 2001 at 07:01:21PM -0600, William Harold Newman wrote: > It looks as though Bruno is right: I screwed up by changing the I'm not so certain, as the defconstant documentation says: If a defconstant form appears as a top level form, the compiler must recognize that name names a constant variable. An implementation may choose to evaluate the value-form at compile time, load time, or both. Therefore, users must ensure that the initial-value can be evaluated at compile time (regardless of whether or not references to name appear in the file) and that it always evaluates to the same value. And with 'same value' I think they mean 'EQL'. The things quoted to me appear more to relate to folding of constants. If: > If I understand correctly, the similarity rules mean e.g. that > operations along the lines of > % echo "(defparameter *foo* '(1 2))" > foo.lisp > % echo "(defparameter *bar* '(1 2))" > bar.lisp > % lisp <<-EOF > (load (compile-file "foo.lisp")) > (load (compile-file "bar.lisp")) > (format t "(EQL *FOO* *BAR*)=~S~%" (eql *foo* *bar*)) > EOF > are supposed to show equality. Has to be true, then the compiler has to remember all litteral constants used in all the files it has ever compiled during this session. This would mean a potential gigantic memory-leak and a performance problem. Not? A bit like a serialization of Java, but then for all the code and constants the compiler ever sees... Right? I hope not :-(... Note that ACL6 returns NIL on the test... Groetjes, Peter -- It's logic Jim, but not as we know it. | pva...@de... "God, root, what is difference?" - Pitr| "God is more forgiving." - Dave Aronson| http://cvs2.cons.org/~pvaneynd/ |