[developers] [spr31181] closure change in ACL 8.0 (from 6.2)?

David Margolies dm at franz.com
Wed Feb 22 23:35:59 CET 2006

Futher investigation shows that a defstruct compiler macro was added
in 8.0 that seems to be overoptimizing the defstruct form (and not
noticing a surrounding lexical variable).

Our current opinion is that your code should work as desired, with all
the listed eval-when cases.  (I say 'current belief' because the
person who did the optimization has yet to comment.  He may have a
different opinion.)

The compiler macro implementing the optimization is controlled by the
(internal) variable excl::*add-defstruct-constructor-compiler-macro*.
If the value of that variable is set to NIL in ACL 8.0, you will get
the 7.0 behavior back (the variable does not exist in 7.0).

If you choose to do this, please do it in such a way that you can undo
it if/when we provide a fix.  Otherwise you will lose the benefits of
valid optimizations after the (perhaps) invalid ones no longer occur.

David Margolies
Franz Inc.

More information about the developers mailing list