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:
- 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 (stopwatchinstopwatch). - 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) vomTAstBinderim Aufruf-Scope des Benutzers aufgelöst.