Subject: (declare (lexical ...)) From: Erik Naggum <erik@naggum.no> Date: 1996/04/14 Newsgroups: comp.lang.lisp Message-ID: <3038440536110836@arcana.naggum.no> I have seen this problem show up from time to time, but no real answer. (feel free to tell me to go away if you think I should.) ANSI Common Lisp is quite elaborate on the compilation environment, but I am not clear as to whether the compilation environment is reset upon commencing compilation of a file, so I assume that it should not be reset (i.e., made empty, inheriting everything from the evaluation environment). this means that free `special' declarations in the compiler environment may affect code compiled later adversely. the maintenance issues in ensuring that improper declarations are not made are non-trivial. it would make sense, I think, to have a `lexical' declaration that would "reverse" any possible `special' declaration in effect at the time. I recognize that it would not be useful to let all binding forms default to lexical scope unless a bound `special' declaration occurs in it scope, but given this, there are no mechanisms to avoid undesirable free `special' declarations, _except_ for the "surround it with asterisks on both sides if it is `special' globally" _convention_. the reason I ask this question is also practical. I have been burnt by CMUCL's treating (setq foo bar) at top-level as an implicit `special' declaration. a warning is duly emitted, but when working within a single CMUCL image for a day or more, such warnings may easily be forgotten. (this can also be construed as a question whether CMUCL is conforming in its implicitly declaring free variables special when setq'd at top-level. I can find no requirements either way for such behavior in ANSI CL.) #<Erik> -- education is for people who can't handle reality the hard way