From: SourceForge.net <no...@so...> - 2009-10-18 13:53:27
|
Bugs item #2868151, was opened at 2009-09-27 11:18 Message generated for change (Settings changed) made by sds You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101355&aid=2868151&group_id=1355 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: clisp Group: lisp error Status: Closed Resolution: Invalid Priority: 5 Private: No Submitted By: Sam Steingold (sds) >Assigned to: Bruno Haible (haible) Summary: (locally (declare (optimize...))) is ignored Initial Comment: (locally (declare (optimize ,,,))) has no effect on compile called inside locally - only the global optimize declarations are honored. ---------------------------------------------------------------------- >Comment By: Sam Steingold (sds) Date: 2009-10-18 09:53 Message: it is not clear why declaim changes the result of compile while locally does not. ---------------------------------------------------------------------- Comment By: Bruno Haible (haible) Date: 2009-10-17 13:27 Message: It is not a bug, but rather the expected behaviour. Please remember to distinguish "scope" and "extent". http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node43.html The LOCALLY special form specifies declarations for code that is lexically contained in this form. When you write (COMPILE NIL 'F) the definition of F is not contained in the LOCALLY form; therefore the declarations in effect at the COMPILE form are irrelevant. In other words, what matters is the declarations in effect at the *definition* of F. What you appear to want is some mechanism that establishes some optimization settings for the code being compiled by the COMPILE function, with dynamic extent. Such a mechanism cannot exist as an override because, as mentioned above, what matters according to CLHS 3.3 is the declarations in effect at the *definition* of F. But what you can do is to change the defaults: (PROG2 (DECLAIM (OPTIMIZE ...)) (COMPILE NIL 'F) (DECLAIM (OPTIMIZE default-settings))) Note that even this will not work across implementations, because of the distinction between compile environment and execution environment that some implementations make. See CLHS:DECLAIM for details. ---------------------------------------------------------------------- Comment By: Sam Steingold (sds) Date: 2009-10-15 13:51 Message: this is NOT an ANSI compliance issue because the eval and compile environments differ, see http://clisp.podval.org/impnotes/compilation.html#semantic-constraints ---------------------------------------------------------------------- Comment By: Sam Steingold (sds) Date: 2009-09-27 14:23 Message: not quite. (locally (declare (optimize (safety X))) (disassemble (lambda (a) (aref a 0) 1))) and > (locally (declare (optimize (safety 3))) (funcall (compile nil (lambda(a) (aref a 0) 1)) 3)) *** - AREF: argument 3 is not an array > (locally (declare (optimize (safety 0))) (funcall (compile nil (lambda(a) (aref a 0) 1)) 3)) 1 works fine, but (defparameter f (lambda (a) (aref a 0) 1)) (disassemble (locally (declare (optimize (safety X))) (compile nil f))) prints the same regardless of X ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101355&aid=2868151&group_id=1355 |