There were a lot of good ideas in Apple’s Dylan language. For example:
C and C++ macros are text substitutions, performed by a preprocessor. The preprocessor has no understanding of the language; it simply splices together text fragments to create replacement phrases.
Dylan macros are written in terms of Dylan language elements; the macros choose their transformation by pattern matching, and they substitute program fragments.
Language-based macros are more powerful than — and avoid a number of common pitfalls of — text-substitution macros.
Update (2013-02-17): The Hacker News thread.