我开始使用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中使用,但它对于开发非常有效(重要的一点是在开发中您可以控制请求,因此当您的请求处理代码执行时,你可以确保代码重新加载发生在处理请求之间)。 –