| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version |
This variable is similar to *load-xref-info*
and *load-source-file-info*
in that it controls
whether information stored in a fasl file should be loaded into
Lisp when the fasl file is
loaded. The information is local name and scope information which is
very useful for debugging.
That information is written to
fasl files when the values of
the optimization qualities safety, space, speed, and debug are such
that either or both of the compiler switches save-local-names-switch
and
save-local-scopes-switch
are true. See Declarations and optimizations
in compiling.htm for information on
switches.
When developing code, the value of this variable should be non-nil
because the usefulness to debugging outweighs the
cost of the additional space used. (See the :local top-level debugging command.)
But when preparing an application for delivery which will not be
interactively debugged, the value nil
is
appropriate.
This example shows how debugger output might differ when local names are and are not loaded. Suppose the function foo (with lots of locals) is defined in the file lln.cl:
(in-package :user) (defun foo (a b c) (let ((c (* a a)) (d (+ c b)) e) (setq e (- c d)) (break) (* e a d)))
We compile the file with speed 1 and safety 1 (so local names are
saved to the fasl file) and then load the file with *load-local-names-info*
set to
t
and then nil
:
cl-user(31): (setq *load-local-names-info* t) t cl-user(32): :ld lln.fasl ; Fast loading /user/lln.fasl cl-user(33): (foo 1 2 3) Break: call to the `break' function. Restart actions (select using :continue): 0: return from break. 1: Return to Top Level (an "abort" restart). 2: Abort entirely from this (lisp) process. [1c] cl-user(34): :local Compiled lexical environment: 0(required): a: 1 1(required): b: 2 2(required): c: 3 3(local): d: 5 4(local): c: 1 5(local): e: -4 [1c] cl-user(35): :cont 0 -20 cl-user(36): (setq *load-local-names-info* nil) nil cl-user(37): :ld lln.fasl ; Fast loading /user/lln.fasl cl-user(39): (foo 1 2 3) Break: call to the `break' function. Restart actions (select using :continue): 0: return from break. 1: Return to Top Level (an "abort" restart). 2: Abort entirely from this (lisp) process. [1c] cl-user(40): :loc Compiled lexical environment: 0(required): a: 1 1(required): b: 2 2(required): c: 3 3(local): excl::local-0: 5 4(local): excl::local-1: 1 5(local): excl::local-2: -4 6(local): excl::local-3: nil 7(local): excl::local-4: 352323842 8(local): excl::local-5: #<Function eval> 9(local): excl::local-6: 16825334 10(local): excl::local-7: 0 [1c] cl-user(41):
The argument names and initial values are remembered in this example, but the local names (d and e) are not and c, an argument, is modified in the code, but the value (1) is no longer associated with c. Further, the system does not distinguish between variables in the function definition and others (dealing with the interpreter, for example) that happen to be around.
Copyright (c) 1998-2019, Franz Inc. Oakland, CA., USA. All rights reserved.
This page was not revised from the 8.2 page.
Created 2012.5.30.
| Allegro CL version 9.0 Unrevised from 8.2 to 9.0. 8.2 version |