我開始使用emacs和slime開發一些小服務。如何在SLIME開發中快速重新加載和重啓
我已經找到了一種更改後重新加載代碼的方法,但我希望這更方便快捷。
這是我現在如何鬥它:
1)啓動的emacs,啓動粘液,然後在煤泥:
2)(負載 「init.lisp」);加載一些不是 變化的初始化代碼
3)(load「myseervice.lisp」);此containts,我是 上
4)(爲MyService工作的代碼:開始)
5)此時seeervice是乳寧,我可以對其進行測試。然後我 更改myseervice.lisp,以修改它。要交換代碼 新版本我這樣做:
6)(則將MyService:停止)
7)(載 「myservice.lisp」)
8)去4)啓動再次...
到目前爲止是這種情況。但手動停止,重新加載和啓動是沒有意義的。在通話之間有很多粘液輸出,所以重複使用先前輸入的命令並不容易4)-7)。
爲了有一個解決辦法,我開始了devhelper包應只在一個命令這樣做對我來說,但它不工作:
(defpackage :devhelper
(:use :common-lisp :myservice)
(:export :start :reload))
(in-package :devhelper)
(defun start()
(myservice:start))
(defun reload()
(myservice:stop)
(load "myservice.lisp") ;I think it is not possible to load it here,
;because this module is using the file that it is just loading
;But it does not have to work this way,
;I just like any good solution
(myservice:start))
而且我認爲我能做到現在這個樣子:
1)啓動的emacs,啓動粘液,然後在煤泥:
2)(負載 「init.lisp」);加載一些不是 變化的初始化代碼
3a)(load「myseervice.lisp」);此containts,我是 工作
3b)的(負載 「devhelper.lisp」)
4)的代碼(devhelper:開始)
5)此時seeervice是乳寧和我可以測試它。然後我 更改myseervice.lisp,以修改它。要交換代碼 新版本我jussst夢見我可以:
6)(devhelper:重裝)
但它凍結在這一點上。
我並不堅持這個devhelper的想法,我只想要一個更流暢的開發週期。
真正的Lisper會怎麼做?我對這一切都非常陌生,我來自傳統的編程背景;)與IDE和導入。
在步驟4)之後,您是否試過簡單地通過C-c C-c或C-c C-k將代碼重新發送到Lisp實現?這就是我所做的。這種'hotpatching'的Lisp圖像不應該在生產IMHO中使用,但它對於開發非常有效(重要的一點是在開發中您可以控制請求,因此當您的請求處理代碼執行時,你可以確保代碼重新加載發生在處理請求之間)。 –