2012-06-24 44 views
4

我開始使用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和導入。

+1

在步驟4)之後,您是否試過簡單地通過C-c C-c或C-c C-k將代碼重新發送到Lisp實現?這就是我所做的。這種'hotpatching'的Lisp圖像不應該在生產IMHO中使用,但它對於開發非常有效(重要的一點是在開發中您可以控制請求,因此當您的請求處理代碼執行時,你可以確保代碼重新加載發生在處理請求之間)。 –

回答

5

歷史

重用以前的命令是不是在淤泥/ Emacs的困難。

命令M-pM-n獲取上一個或下一個輸入。 M-rM-s允許您在輸入中搜索(使用正則表達式)。從緩衝區

另一種方法是在命令寫下成一個Lisp文件,打開在緩衝區中的文件,然後你可以從那裏執行它們

執行。

刷新

你重裝的想法是好的。您可以關閉服務,加載新代碼並再次啓動服務。你應該知道它爲什麼會凍結。你應該調試它。您的手冊和編碼版本之間的差異之一是:停止,加載和啓動之間的時間在編碼版本中要短得多。你應該檢查是否有問題。代碼

更先進的組織通常當你有一個以上的文件,它是有道理的使用一個或多個系統來組織代碼。如果您的代碼位於使用文件編譯器編譯代碼的文件中,這也是有意義的。這樣你可以在早期得到警告和錯誤。 Common Lisp開發人員經常使用ASDF作爲系統工具。許多實現還有其自己的功能(具有更多或更少的功能)。

一種系統,工具提供你,你可以在系統上使用的一些命令:

  • 負載:負載編譯或源代碼,如果必要(或強制)
  • 編譯:如果需要的話進行編譯代碼(或強制)
  • 編譯和加載:編譯和加載代碼,如果有必要(或強迫)...

通常它會發出必要的最小量的命令來編譯或加載代碼。但是你可以強制它重新加載或重新編譯所有內容。

通常系統可以有子系統。子系統可以例如是編譯服務。如果您更改了代碼,請將其保存並將其保存在子系統中。 ASDF(或類似的工具)將編譯已更改的文件並加載它們。

更先進:編寫自己的命令對系統工具,然後停止運行服務,編譯/加載更改,然後啓動服務

建議:

讓你的版本去,找出爲什麼它掛起。

相關問題