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

Re: Parodies make everyone mad

At 12:28 PM -0500 11/18/02, Guy Steele - Sun Microsystems Labs wrote:
>If macros are part of
>the customary toolset of a community of programmers
>and there are guidelines and expectations about how they
>are and are not to be used, and about the level of
>documentation needed, then they need not be a problem.

This begs the question, what are a reasonable set of guidelines
for writing good macros in a language like Lisp or Scheme.  Here
are some rules of thumb I use; I'm embarrassed to write this
because the shortness of the list and the lack of rigor shows
the lack of depth in my thinking in this area.  I hope that
people who've thought more deeply and thoroughly will use this
as an excuse to write down a good list.

  - Don't include free references to "local" bindings.
    Unfortunately, I see this a lot from people who are
    not experienced macro writers.
  - Don't evaluate "value" parameters more than once.
    Do all evaluations "in order", unless there is a very
    good reason to do it otherwise.
  - Don't expand a "body" in more than one place, unless
    there's a very good reason to do otherwise.
  - If your language doesn't do "hygiene", do it by hand.
  - Macros aren't functions; don't use them where a function
    would do.  I hope your language and its compiler can do
    inlining without you having to resort to macros.
  - Stay close to the syntax of the "built-in" forms of the
    rest of your language.  Nobody likes having to learn
    lots of new syntax.