----++ Staged Meta Programming Staged languages distinguish stages of execution. Many compile-time meta-programming systems distinguish only a run-time and a compile-time. MetaML does not restrict the number of stages. * MetaML ----++ Template Meta Programming * [[Template Haskell]] * [[CppTemplates][C++ Templates]] ----++ Macro Systems Macros generate code. Macro systems that operate at the lexical level are usually called lexical macros. Lexical macro systems are often independent of specific programming language. Macro system that operate on a structured representations of source code are called syntax macros. Macro systems mainly vary in the what the macro is able to do with macro arguments and how the macros are to be invoked. Some macro systems allow the definition of a context-free syntax for the arguments of the macro. Hygience macro systems avoid unintended capturing of identifiers that are used in the context or in the macro definition. * [[LispLanguage][Lisp]] Macros * [[SchemeLanguage][Scheme]] R5RS Macros * Syntax macros in [[Bigwig]] * [[Maya]] ----++ Aspect-Oriented Programming * AspectJ * [[http://common-lisp.net/project/aspectl/][AspectL]] ----++ Quotation and Antiquotation * [[http://caml.inria.fr/camlp4/manual/index.html][Camlp4]] * SML/NJ [[http://cm.bell-labs.com/cm/cs/what/smlnj/doc/quote.html][Object Language Embedding with Quote/Antiquote]] * [[http://www.cl.cam.ac.uk/Research/HVG/Isabelle/logics.html][Isabelle's Logics]] * [[http://citeseer.nj.nec.com/weise93programmable.html][Programmable Syntax Macros]] * [[Stratego.MetaProgrammingWithConcreteObjectSyntax][Meta Programming with Concrete Object Syntax]] ----++ Systems * [[GRAMPS]]