7

我经常发现自己从 REPL 开始了一些长时间运行的进程,然后希望我可以在 REPL 运行时继续使用它来执行其他任务。我可以使用 slime 来后台当前线程或启动一个新的 REPL 控制线程吗?启动一个额外的 REPL 缓冲区也可以。

4

3 回答 3

2

请原谅我有点陈词滥调和非粘液的具体答案;从好的方面来说,它可以与任何 clojure REPL 一起使用。

当我提前知道我正在从 REPL 开始一个长时间运行的任务时,我会在 deref-ing 之前使用future并检查它。future-done?

于 2012-08-09T19:55:44.110 回答
2

编辑:

嗯,我不知何故错过了你问题上的 Clojure 标签。如果下面的解决方案适用于 Clojure,我会感到非常惊讶,因为您可能知道,不幸的是,Clojure 社区(至少对于我们这些使用 ClojureCL 的人来说)维护着自己的 Slime 版本。我不会删除答案,因为它可能对搜索此功能的 CL 程序员有所帮助。

除非 Clojure 有类似的解决方案,它允许多个 REPL 在单个套接字上多路复用,否则您可以手动(从*inferior-lisp*缓冲区)启动第二个 Swank 服务器并通过连接到它slime-connect作为一种解决方法。(无法测试这个 ATM,因为我不久前就停止使用 Slime 和 Clojure。)


你试过slime-mreplcontrib吗?我自己并没有真正使用过它,但是在 CCL/Win/Emacs 24 下对我进行了快速测试。

我是这样测试的:M-x slime,进入(sleep 10)REPL,切换缓冲区,M-x slime-new-mrepl

于 2012-08-09T01:18:01.917 回答
1

这可能无法回答您的问题,但它可能有助于意识到只要(slime-communication-style):spawn,使用完成的评估C-x C-e总是会产生自己的线程,并且可以与 REPL 线程中发生的任何事情并行运行。输出(来自println等)将出现在 REPL 缓冲区中。

于 2012-08-13T10:00:58.473 回答