Hintergrund Ich oft finde ich selbst einige lang laufenden Prozess von der REPL starten und dann wünschte, ich könnte weiterhin die REPL für andere Aufgaben, während es ausgeführt wurde. Kann ich Schleim zum Hintergrund des aktuellen Threads verwenden oder einen neuen REPL-Kontroll-Thread starten? Starten eines zusätzlichen REPL-Puffer wäre auch in Ordnung.Kann ich einen laufenden Thread in den Slime (Swank Emacs)
Antwort
Edit:
Hm, ich schaffte es irgendwie, die Clojure-Tag auf Ihre Frage zu verpassen. Ich wäre sehr überrascht, wenn die untenstehende Lösung für Clojure funktioniert hätte, da, wie Sie wahrscheinlich wissen, die Clojure-Community leider (zumindest für diejenigen unter uns, die Clojure verwenden) eine eigene Version von Slime unterhält. Ich werde die Antwort nicht löschen, da sie für CL-Programmierer, die nach dieser Funktionalität suchen, hilfreich sein kann.
Es sei denn, es eine ähnliche Lösung für Clojure ist, die über eine einzige Buchse Multiplex mehrere REPLs erlaubt, könnten Sie vielleicht starten Sie einfach einen zweiten Swank Server von Hand (aus dem *inferior-lisp*
Puffer) und es über slime-connect
als Behelfslösung verbinden. (Kann diese ATM nicht testen, da ich vor einer Weile mit Schleim mit Clojure gestoppt.)
Haben Sie versucht, die slime-mrepl
contrib? M-x slime
, geben Sie (sleep 10)
in der REPL, Wechselpuffer, M-x slime-new-mrepl
: Ich habe es nicht wirklich selbst, aber ein schneller Test funktionierte für mich unter CCL/Win/Emacs 24.
Getestet habe ich es wie folgt verwendet.
Bitte verzeihen Sie mir für eine etwas triste und nicht Schleim spezifische Antwort; Auf der Oberseite wird es mit jedem Clojure REPL funktionieren.
Wenn ich im Voraus weiß, beginne ich eine lange laufende Aufgabe von der REPL dann starte ich die Berechnung mit future
und überprüfe mit future-done?
, bevor ich es definiere.
Dies könnte Ihre Frage nicht beantworten, aber es könnte hilfreich sein, zu erkennen, dass, solange (slime-communication-style)
:spawn
ist, getan Auswertungen mit C-x C-e
immer ihren eigenen Thread erzeugen und parallel laufen kann, was auch immer in dem REPL Thread geschieht. Die Ausgabe (von println
usw.) erscheint im REPL-Puffer.
immer noch nützlich, auch wenn es nicht direkt die Antwort auf diese Frage ist, danke –