我正在運行一個通用的lisp項目,每5秒鐘獲取一次市場數據。我對代碼做了一些調整,並希望在生產環境中對其進行更新。事件循環是非常標準:重新編譯正在運行的CL系統
(loop
(fetch-data)
(sleep 5))
因爲loop
的阻擋性質的我沒有REPL在我手上。
我的問題:我可以動態更新運行代碼嗎?
我知道,我可以(asdf:compile-system :system-name)
我也知道,我可以redefine classes at runtime重新編譯該項目。 (不是說我在實現中使用類)
但是現在我不能使用REPL,我必須以某種方式在另一個REPL中加載環境。有沒有辦法做到這一點? (我正在使用SBCL)
在我看來,最簡潔的方法是隻實現異步數據提取。
你在哪個平臺上運行?你能用Control + C中斷並重新編譯嗎? – jkiiski
我正在使用SBCL。我知道我可以打斷,但這樣我的數據就會有差距。 – tsikov
你在自己的線程中運行循環嗎? – coredump