2012-06-24 29 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(或类似的工具)将编译已更改的文件并加载它们。

更先进:编写自己的命令对系统工具,然后停止运行服务,编译/加载更改,然后启动服务

建议:

让你的版本去,找出为什么它挂起。

相关问题