【发布时间】:2017-04-30 19:59:16
【问题描述】:
我正在运行一个常见的 lisp 项目,该项目每 5 秒获取一次市场数据。我对代码进行了一些调整,并希望在生产环境中对其进行更新。事件循环真的很标准:
(loop
(fetch-data)
(sleep 5))
由于 loop 的阻塞性质,我没有 REPL 可供使用。
我的问题:我可以动态更新正在运行的代码吗?
我知道我可以用(asdf:compile-system :system-name)重新编译项目
我也知道我可以redefine classes at runtime。 (并不是说我在我的实现中使用类)
但是现在我不能使用 REPL,我必须以某种方式将环境加载到另一个 REPL 中。有没有办法做到这一点? (我正在使用 SBCL)
在我看来,最简洁的方法就是实现异步数据获取。
【问题讨论】:
-
您在哪个平台上运行?你可以用 Control+C 打断并重新编译吗?
-
我正在使用 SBCL。我知道我可以打断,但这样我的数据就会有缺口。
-
您是否在自己的线程中运行循环?
-
我不会编译正在运行的程序中的代码。我会在其他地方编译它并加载编译后的代码。
-
@coredump 不。但我想这是一种解决方案。 :)
标签: common-lisp read-eval-print-loop sbcl