The term metaprogramming in Rust often overlaps with the term macros. There are two primary types of macros available in Rust:
- Recursive
- Procedural
Both types of macros take as input an abstract syntax tree (AST), and produce one or more AST.
A commonly used macro is println. A variable number of arguments and types are joined with the format string through the use of a macro to produce formatted output. To invoke recursive macros like this, invoke the macro just like a function with the addition of a ! before the arguments. Macro applications may alternatively be surrounded by [] or {}:
vec!["this is a macro", 1, 2];
Recursive macros are defined by macro_rules! statements. The inside of a macro_rules definition is very ...