メタプログラミング
他のコードを生成・変換・操作するコード。コンパイル時(静的)にも実行時(動的)にも行える。
その幅は広い。C のマクロ(テキスト置換)→ Rust/Scala のマクロ(AST 変換)→ Lisp のマクロ(コード=データで最強)→ C++ テンプレート → Python のデコレーターと __getattr__ → JS の Proxy。Java のアノテーションとリフレクションは独自の系統をなす。
定型コードの削減(Serde、Pydantic、dataclasses)、ORM、モック、フレームワークに向く。代償はデバッグの難しさ、IDE 支援とスタックトレースの質の低下、使いすぎやすさ。古い格言どおり、マクロを書く前にまず同じコードを3回書け。