:DBG

Faré fahree at gmail.com
Mon Nov 18 05:17:41 UTC 2013


In ASDF 3.1.0.14, I introduced a macro :DBG (in uiop/utility.lisp).
Yes, it's in the keyword package. Why?
Because it's the one and only macro I want to be accessible from everywhere
without a prefix, yet without modifying existing defpackage forms to make
it accessible — because it's only used temporarily for debugging.

:DBG is a macro for print-debugging. The syntax is
   (:DBG tag forms... last-form)
The semantics is that if tag is true, print the tag, then for each
form, write its source and its values; return the values of the last
form. If tag is false, just evaluate the last form and return its
values. (Tag is typically a constant keyword or string, identifying
the point where values are printed.)
The expansion is rather space and time efficient, as far as the
semantics permit.

I find :DBG soooo useful for print-debugging. I've seen tens of
variants of it, but every time with something not quite right in the
syntax, semantics or implementation. I just wanted one variant that
got everything right, and make it ubiquitous. Because when you need
it, you need it now, and there's no time to modify things to load an
additional library. And when you're done, you want minimal cleanup,
too: just delete the form, except maybe keep the last subform.

Previously, I was using (uiop:uiop-debug) from uiop/utility which
allows you to load a magic file of your choice that defines a debug
mode. The default one I provided was mine, which define :DBG as DBG in
your current package (thereby avoiding symbol import issues). But that
still adds a new definition everytime and an extra line or form to
cleanup.

I was recently convinced that using the keyword package instead makes
perfect sense: on the one hand, that's using a shared namespace that
it is polite to not pollute, but on the other hand, such a temporary
print-debugging macro the only use case I imagine of otherwise wanting
something to be immediately accessible without package prefixing yet
without modifying the package definition form.

It's still time to remove that macro before the next release, but I
believe it's the right thing to include it, and maybe some of you will
agree with me and start using it, if not from the yet unrelease ASDF
3.1.1, perhaps from a copy in your .sbclrc.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
The common argument that crime is caused by poverty
is a kind of slander on the poor.
        — H. L. Mencken



More information about the pro mailing list