Power Features Advanced 18 min

Makros

Ein Makro ist ein Compiler-Werkzeug: Es verändert Code, bevor daraus ein Programm gebaut wird.

01 Lesson

Makros einfach erklärt

Stell dir vor, du schreibst eine Notiz an den Compiler: “Pack vor diese Methode bitte Logging.”

Das Makro nimmt diese Notiz und baut echten Code daraus. Danach kompiliert Emerald den erweiterten Code.

02 Lesson

Makro auf Methode

macro Logged on Method bedeutet: Dieses Makro darf Methoden verändern.

logged.ems
macro Logged on Method {
    StatementAST entry = quote stmt {
        println("enter");
    };

    method.body.prepend(entry);
}

public class Calculator {
    @Logged
    public Int square(Int value) {
        return value * value;
    }
}
03 Lesson

quote und unquote

quote heißt: “Behandle diesen Code als AST-Vorlage.”

$(...) heißt: “Setze hier dynamisch etwas ein.”

quote-unquote.ems
macro AddDynamicLog on Method {
    ExpressionAST message = Expr::str("dynamic " + method.name);

    StatementAST entry = quote stmt {
        println($(message));
    };

    method.body.prepend(entry);
}