Don Wrote: > > You missed: pattern matching, > > Yes, you've got me there. I've assumed that pattern matching, while a > major feature, is not fundamental to the Nemerle macro-system, but I may > be mistaken. > > One obvious difference which *is* fundamental is that Nemerle macros > allow new syntax. > > Am I correct in thinking that Nemerle always requires complete ASTs? > That is, given a name "x", can you access variables "x1", "x2", "x3" ? > > > quasi-quotation, > > No, that's present in D. It's the primary reason I say that the > differences are mostly syntactic, since I see this as THE fundamental > feature. You need to be able to reenter the macro system after you have > left it. Once you can do that, you can do pretty much anything.
You not understand... pattern matching and quasi-quotation tightly bound. The quasi-quotation produce instances of Algebraic Data Type (AlgTD) which can be decomposed (and matched) by pattern matching (PM). We use PM to "read" code of a project. For example, see C# grammar: http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/csharp-parser/CSharpParser/Parser.n?r=9436 which made by PegGrammar macro: http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/peg-parser/Nemerle.Peg.Macros?r=9436 Or see our foreach macro: http://code.google.com/p/nemerle/source/browse/nemerle/trunk/macros/core.n?r=9436#508 > > running of fully functional Nemerle > > code in compile time, > > Yes, but that's a different issue. In D, running code at compile time is > regarded as an aspect of constant-folding, and is not restricted to > macros. The constant-folding is too limited solution. The power of of macros, including the ability to use are any libraries and any data sources. And ... you use enterpretation... slow way. > > access to compiler API in macros > > In practice, has to be a library, right? Otherwise the compiler > internals would be exposed? (This is an issue we're struggling with). Yes. The Nemerle compiler is library. :) Unfortunately Nemerle API is not pretty clear. But I believe it's a right way. P.S. Sorry for my (Russian) English. :)