Racket REPL über TCP

8

Ich habe eine ziemlich komplexe Anwendung mit Racket (früher PLT Scheme) erstellt und möchte eine REPL für Debugging-Zwecke hinzufügen. Ich habe versucht, es über einen TCP-Stream zugänglich zu machen:

%Vor%

(Try name result-if-exception form) ist ein Makro, das grundlegende Ausnahmebehandlung bereitstellt, (log ...) und (display-and-log ...) tun, wie sie klingen.

Wenn ich jetzt auf die REPL zugreife, kann ich nicht einmal Konstanten auswerten, da ich immer den Fehler compile: unbound identifier (and no #%app syntax transformer is bound) at: #%top-interaction bekomme. Wie kann ich diese REPL arbeiten lassen? Und wie kann ich auf Werte define d zugreifen, bevor ich den REPL-Server starte?

    
lbruder 10.05.2011, 07:06
quelle

1 Antwort

3

Sie verwenden read-eval-print-loop , was im Wesentlichen dasselbe ist wie die Verwendung von eval und daher die gleichen Probleme verursacht. Eine ausführliche Erklärung finden Sie im relevanten Leitfaden . Es ist am besten, das vollständig zu lesen, aber die Antworten, nach denen Sie suchen, sind entweder der Abschnitt "Namespaces" oder der Abschnitt "Namespaces and Modules" - der erste ist, wenn Sie eine Toplevel-Art eines Namespace wollen Der zweite ist, wenn Sie einen Namespace haben möchten, der der tatsächlichen Datei entspricht, in der der Code erscheint. (Der erste ist normalerweise besser - wenn Sie zum Beispiel den zweiten verwenden, steht repl-server selbst für den REPL-Benutzer zur Verfügung ein fragwürdiges Feature ...)

So würde es aussehen:

%Vor%

und für die zweite, definieren Sie einen Anker und verwenden Sie namespace-anchor->namespace , wie das letzte Beispiel auf dieser Seite zeigt.

[BTW, siehe auch run-server etwas, es ist ein bisschen alt, aber kann immer noch nützlich sein.]

    
Eli Barzilay 10.05.2011, 07:20
quelle