Next: Q5.1.7, Previous: Q5.1.5, Up: Miscellaneous
setq ?A typical misuse is probably setqing 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 setqed without
defvaring 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