Programmering
  1. Teori
  2. Logik
  3. Metaprogrammering
  • Eksamen
  • Projektarbejde
  • Synopsis
  • Cheatsheets
    • Python cheatsheet
    • Rust cheatsheet
    • Kodningsplatforme
  • Opsætning
    • Git
    • Python
    • Rust
    • VScode
  • Teori
    • Arbejdsproces
      • Abstraktion
      • Fejlfinding
      • Generalisering
      • Git
      • Kommentarer
      • Moduler
      • Pakker
    • Data
      • Datastrukturer
      • Datatyper
      • Ejerskab og referencer
      • Enum
      • Hukommelse og pointers
      • Indkapsling
      • Polymorfi
      • Struct
    • Diagrammer
      • Brugerhistorier
      • Klassediagrammer
      • Rutediagrammer
      • Tegneprogrammer
    • Logik
      • Anonyme Funktioner
      • Fejlhåndtering
      • Grådig algoritme
      • Metaprogrammering
      • Samtidig programmering
  • Studieområdet
    • Forslag til emner
    • Empiri
    • Metoder i Programmering
  1. Teori
  2. Logik
  3. Metaprogrammering

Metaprogrammering

Teori

Udgivet

30. marts 2026

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.

NoteRust simpel makro

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);
}
Tilbage til toppen

Referencer

[1]
S. Klabnik og C. Nichols, “20.5. Macros”, i The Rust Programming Language, No Starch Press. Tilgængelig hos: https://doc.rust-lang.org/book/ch20-05-macros.html

ZBC Slagelse HTX

Senest redigeret d. 30. marts 2026

JACS