Kenneth Tilton ken@tiltontec.com writes:
On Tue, Mar 18, 2014 at 4:50 PM, Alessio Stalla < alessiostalla@gmail.com> wrote:
On Tue, Mar 18, 2014 at 8:54 PM, Paul Tarvydas < paultarvydas@gmail.com> wrote: @All, thanks for the interesting discussion. Certainly gives me something to chew on. Re-reading the responses, I see that, while I did sort-of say it, I didn't emphasize the point of this: I have a PEG-syntax parser written in esrap. I am binding at least two such parsers as reader-macros (not the normal kind of macro). I always thought that reader macros should be called a different name, because they are not macros. Yes, they produce code; but that's the only point they have in common with macros.
Given that that is all that macros do, methinks that a rather comprehensive commonality.
Even a keyboard macro has no job other than to take a key chord and produce key strokes,
Indeed, MACRO comes from greek meaning BIG, and refers to the fact that a single item is used to represent a (possibly) BIG group of items.
A macro operator is a single operator that gets expanded into a big form (check it out, most lisp macros expand to big forms!).
A macro character, is a single character that gets read into a big sexp.
A keyboard macro, is a single key that gets read as a big sequence of keys.
A compiler macro, is a single function call that gets substituted by a big, inlined and optimized, function call.
It's not the code generation that's the common part in all those macros, it's the small to big expansion that usually occurs.