Next: Q5.1.7, Previous: Q5.1.5, Up: Miscellaneous
setq
?A typical misuse is probably setq
ing a variable that was meant to
be local. Such a variable will remain bound forever, never to be
garbage-collected. For example, the code doing:
(defun my-function (whatever) (setq a nil) ... build a large list ... ... and exit ...)
does a bad thing, as a
will keep consuming memory, never to be
unbound. The correct thing is to do it like this:
(defun my-function (whatever) (let (a) ; default initialisation is to nil ... build a large list ... ... and exit, unbinding `a' in the process ...)
Not only is this prettier syntactically, but it makes it possible for
Emacs to garbage-collect the objects which a
used to reference.
Note that even global variables should not be setq
ed without
defvar
ing them first, because the byte-compiler issues warnings.
The reason for the warning is the following:
(defvar flurgoze nil) ; ok, global internal variable ... (setq flurghoze t) ; ops! a typo, but semantically correct. ; however, the byte-compiler warns. While compiling toplevel forms: ** assignment to free variable flurghoze