Dies ist eine eher theoretische Frage zu Makros (glaube ich). Ich weiß, dass Makros Quellcode verwenden und Objektcode erzeugen, ohne ihn zu evaluieren, was es Programmierern ermöglicht, vielseitige syntaktische Strukturen zu erstellen. Wenn ich diese beiden Makrosysteme klassifizieren müsste, würde ich sagen, dass es das Makro "C style" und das Makro "Lisp style" gibt.Wie verfolgt eine Makro-fähige Sprache den Quellcode für das Debugging?
Es scheint, dass das Debugging von Makros ein bisschen schwierig sein kann, da der aktuell laufende Code zur Laufzeit von der Quelle abweicht.
Wie verfolgt der Debugger die Ausführung des Programms in Bezug auf den vorverarbeiteten Quellcode? Gibt es einen speziellen "Debug-Modus", der gesetzt werden muss, um zusätzliche Daten über das Makro zu erfassen?
In C kann ich verstehen, dass Sie eine Kompilierzeit für das Debuggen festlegen würden, aber wie würde eine interpretierte Sprache, wie einige Formen von Lisp, es tun?
Entschuldigen Sie sich dafür, dass Sie das nicht ausprobiert haben, aber die lisp toolchain benötigt mehr Zeit als ich ausgeben muss, um herauszufinden.
Aber das Mappen von kompiliertem Code zurück zu Makro löst das folgende Problem nicht: Wenn Makro Code basierend auf deklarativen Eingaben generiert (zB Makro, das Parser aus kontextfreier Grammatik generiert), wäre es sehr nützlich während des Debuggens zu finden heraus, welcher Teil der Eingabe "aktiv" ist (z. B. welche Grammatikregel wird angepasst, wenn das möglich ist). Dies würde erfordern, dass der Makroschreiber explizit angibt, welche Teile der erzeugten Codekarte welchen Teilen der Makroeingabe entsprechen. Haben Racket-Makros solche Fähigkeiten? Ansonsten entspricht das dem Debuggen von (teilweise) erweitertem Code. –
"Ansonsten entspricht es nur dem Debugging von (teilweise) erweitertem Code." Nicht ich denke, dass ich in diesem Satz falsch liege. Bitte ignoriere es. –
dmity-vk: Richtig - die 'Syntax'-Spezialform in Racket kümmert sich im Wesentlichen darum, Code-Teile des Makro-Benutzers mit Code-Stücken aus dem Makro selbst zu kombinieren und sicherzustellen, dass der Quellort auf den resultierenden Formularen liegt in allen Formen korrekt. –