Metaprogrammering
Teori
Metaprogrammering handler om at anvende kode til at skrive kode. Det kan bruges til polymorfi og til at generalisere mønstre der ellers ikke ville være muligt.

Koden til selve metaprogrammeringen vil som regel blive fortolket før resten af koden kompileres. Det gør det mere fleksibelt, men ofte også mere kompliceret at skrive og fejlfinde.
I Rust kan metaprogrammering bl.a. udføres vha. makroer (macros) [1]. Herunder er et eksempel på en simpel “deklarativ makro” der printer en numereret liste. Andre type makroer kan bruges til at lave egne udgaver af Derive som de indbyggede traits Debug og Clone, manipulere funktioner eller mere avancerede generiske funktioner.
Makroen accepterer et vilkårligt antal argumenter, hvilket ikke er muligt med almindelige funktioner i Rust.
macro_rules! list {
( $( $x:expr ),+ ) => {
{
#![allow(unused)]
let mut i = 1;
$(
println!("{}: {}",i,$x);
i+= 1;
)+
println!("");
}
};
}
fn main() {
list!("Første punkt");
list!("Hej", 67, String::from("Dav"), 4.7);
}