Major Section: PROGRAMMING
ACL2 has several mechanisms to speed up the evaluation of function calls by compiling functions: see comp, see set-compile-fns, and see certify-book. The intention is that compilation never changes the value returned by a function call, though it could cause the call to succeed rather than fail, for example by avoiding a stack overflow.
The state
global variable 'compiler-enabled
is set automatically
when the system is built, and may depend on the underlying Lisp
implementation. (In order to disable the compiler at build time, which will
defeat the speed-up but usually be pretty harmless when the host Lisp is CCL
or SBCL, see the discussion of ACL2_COMPILER_DISABLED
in distributed file
GNUmakefile
.) The value of 'compiler-enabled
, as returned by
(@ compiler-enabled)
, can be t
, :books
, or nil
. If the value
is nil
, then include-book
and certify-book
coerce their
arguments :load-compile-file
and compile-flg
arguments (respectively)
to nil
. Otherwise, the value is :books
or t
and there is no such
coercion; but if the value is not t
, then comp
and
set-compile-fns
are no-ops, which is probably desirable for Lisps such
as CCL and SBCL that compile on-the-fly even when the compiler is not
explicitly invoked.
However, you may have reason to want to change the above (default) behavior.
To enable compilation by default for certify-book
and
include-book
but not for comp
or set-compile-fns
:
(set-compiler-enabled :books state)To enable compilation not only as above but also for
comp
and
set-compile-fns
:
(set-compiler-enabled t state)To suppress compilation and loading of compiled files by
include-book
(for example, if you get a raw Lisp error such as ``Wrong FASL version''):
(set-compiler-enabled nil state)
See book-compiled-file for more discussion about compilation and books.