[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: macros vs. blocks
For those who haven't already seen it, Oleg Kiselyov gives a good summary of
the case for macros in this presentation:
http://okmij.org/ftp/papers/Macros-talk.pdf
One point he makes is that macros do not supplant "second-class objects":
"One sometimes hears that higher-order functions (and related
non-strictness) make macros unnecessary. For example, in Haskell, 'if' is a
regular function. However, every language with more syntax than
lambda-calculus has phrases that are not expressions. Examples of such
second-class forms are: type, module, fixity and other _declarations_;
binding forms; statements. Only macros can expand into a second-class
object. The result of a function is limited to an expression or value."
The paper also gives the example of SSAX, a very powerful SAX parser
framework. This uses a top-level macro, SSAX:make-parser, which builds a
parser based on user-provided callbacks. This is described here:
http://okmij.org/ftp/Scheme/xml.html
The actively anti-macro camp might find useful material in this
presentation, since it points out some of the dangers of macros. It also
proposes a solution, which is to use CPS to make macros composable, and also
to translate ordinary functions into macros so that CPS macros don't have to
be hand-written. IOW, Oleg is writing functions which are "compiled" to CPS
macros, thus creating a domain-specific little language without having to
actually write macros.
Anton