Files
RustAst/docs/Macros 1.md
Michael Schimmel 494bf554d2 Old Docs added
2026-02-20 10:09:22 +01:00

1.5 KiB

Projektplan: Hybrid-Makro-System

Datum: 06.11.2025 14:39

Motivation

Die Implementierung von stopwatch als RTL-Funktion war unzureichend, da der Zugriff auf andere Laufzeit-Symbole (wie print) einen langsamen Laufzeit-Lookup (FindSymbolAddress) erfordert hätte. Die Umwandlung in ein Makro löst das Bindungs-Problem, wirft aber das Problem der Makro-Hygiene auf. Explizite Lösungen (wie gensym oder $-Suffixe) sind syntaktisch zu komplex, unleserlich und/oder unzureichend.

Ziel

Entwicklung eines impliziten, automatischen Makro-Systems. Dieses System muss hygienisch für Definitionen sein (um Kollisionen bei internen Variablen wie start-time zu verhindern), aber unhygienisch für freie Symbole (um kontext-abhängige Makros, die z.B. *debug-mode* lesen, zu ermöglichen).

Die Komplexität der Hygiene soll vollständig vom Makro-Autor in den Makro-Expander (TExpansionVisitor) verlagert werden.

Ergebnis

Ein Makro-System, bei dem:

  1. Automatische Hygiene: Alle Definitionen (def, fn-Parameter etc.) innerhalb eines Makro-Templates (quasiquote) automatisch und eindeutig umbenannt werden (z.B. start-time -> start-time_123). Dies löst das Verschachtelungs- und Kollisionsproblem (stopwatch in stopwatch).
  2. Unhygienische Freie Symbole: Alle freien Symbole (z.B. print, timestamp, *debug-mode*), die im Makro-Template verwendet, aber nicht definiert werden, unberührt bleiben. Diese werden (unhygienisch) vom TAstBinder im Aufruf-Scope des Benutzers aufgelöst.