其他答案很好地涵盖了这个问题。
但是,从实际层面来看,如果您使用 Common Lisp 和 Slime,并且希望能够将代码从 Emacs 编译到正在运行的程序中,您将需要告诉 Swank 从循环内部进行更新。
将以下内容添加到您的代码中,然后在循环中添加(update-swank)。
(defmacro continuable (&body body)
`(restart-case
(progn ,@body)
(continue () :report "Just Continue")))
(defun update-swank ()
"Called from within the main loop, this keep the lisp repl working"
(continuable
(let ((connection (or swank::*emacs-connection*
(swank::default-connection))))
(when connection
(swank::handle-requests connection t)))))
这是使用您可以在此视频中使用编辑器实时重新编译这一事实的一种方法 (抱歉插入我自己的 vid)。
另一种方法(再次使用 Slime)是告诉它使用不同的线程进行通信。我更喜欢前一种方法,但是当跨线程使用时,opengl 非常不稳定。
[更多详细信息]
上面代码中的 continuable 宏会捕获任何错误,并为您提供忽略它并继续的选项。我发现这真的很有帮助,而且我经常在 repl 中犯错误,我不想从错误中“中止”,因为这会中止我的主循环。