Actually macros are not first-class in Arc (though they are stored in the same namespace as everything else, unlike in Scheme). You can't return one from a function, for instance. They were a feature of early implementations (they're mentioned in various places in old stuff related to its development), but they were cut before the first release. When I asked pg why he removed them, his answer was:<p>> I don't remember. It was either because they were useless or confusing or intellectually inelegant.<p>Having experienced first-class macros in my own Lisp implementation, I'm inclined to agree. Though there are various promises of efficient implementations scattered through the internet, nobody actually goes into enough detail to explain it. Non-first-class macros are the way to go for efficiency, at least, and first-class macros themselves are fairly useless.