[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Science to suppress compiler warnings

From: Stephen J. Turnbull
Subject: Science to suppress compiler warnings
Date: Wed, 03 Jun 2009 13:43:30 +0900

Xavier Maillard writes:

 > Elisp manual at "Compiler Errors" section (16.6) says we should
 > conditionalize variable use with a boundp test (same thing for
 > undefined function) but I find it very unpractical.

If this is related to your work on supporting old versions of Emacs,
my advice is "live with it".  Either use the runtime test if it's an
Emacs-defined variable, or use an appropriate `defvar' or `defconst'
to initialize the variable.

Suppressing compiler warnings is very likely to lead to runtime
errors, often intermittent ones.  Eg, there may be an unusual code
path that leads to reference to a void variable very early in an Emacs
session.  Boom!  But unless you type that exact sequence of commands
immediately after starting Emacs, something requires the relevant
library, and no problem can be found.

Such bugs are quite hard to diagnose, even to localize, if the user is
not an Emacs expert.  A boundp check with a good error message, or a
proper initialization with `defvar', will prevent or at least help
diagnose a lot of problems.

 > I thought (probably was wrong) that:
 > (eval-when-compile (defvar foo nil))
 > would do the trick. Is it the correct way to avoid warnings ?

If you don't understand what this does, I have to recommend avoiding
this trick.  It's a dangerous optimization, not a fix.

This kind of warning suppression is a *white lie* to Lisp.  If you
know what you're doing, and you're desperate for space savings, it may
be useful.  Otherwise, you're just asking for trouble.  Just defvar at
loadtime (costless) or require the defining library (usually at a
fairly small space cost).

reply via email to

[Prev in Thread] Current Thread [Next in Thread]