A symbol macro is a symbol that macroexpands into a lisp form. It
is similar to a preprocessor macro in C, but it must expand into a
syntactically complete expression. Symbol macros are the underlying
technology behind the with-slots
and with-accessors
macros. They allow you to introduce an
identifier that appears to be a lexical variable, but actually
executes some arbitrary code to compute a value. So we can place
the storage for a variable in a vector or in an instance, and use a
symbol macro to make it appear to be an ordinary variable.
Gerry Sussman doesn't like symbol macros. They are a lie. It appears that you are just doing an ordinary variable access, which should be a quick and simple operation, but in fact you could be executing arbitrary code. This can lead to some nasty suprises.
But in my opinion, you shouldn't discard a useful tool just because there is a way to misuse it. If your symbol macro is just redirecting a variable to a slot in an instance, there is little harm in that.
1 comment:
I find symbol macros useful when using structs, for the same reason with-slots is useful — it can often make the code in their scope more readable.
Post a Comment