我开始使用 emacs 和 slime 来开发一些小服务。
我找到了一种在更改后重新加载代码的方法,但我希望这更方便、更快捷。
这就是我现在的做法:
1)启动emacs,启动粘液,然后在粘液中:
2)(加载“init.lisp”);加载一些不会改变的初始化代码
3)(加载“myseervice.lisp”);这包含我正在处理的代码
4)(我的服务:开始)
5)此时seeervice正在运行,我可以对其进行测试。然后我对 myseervice.lisp 进行更改,以对其进行修改。要将代码交换到新版本,我这样做:
6)(我的服务:停止)
7)(加载“myservice.lisp”)
8) 转到 4) 重新开始...
到目前为止,这有效。但是手动停止、重新加载和启动并不好玩。并且调用之间有大量的 slime 输出,因此很难重用之前键入的命令 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)(加载“myseervice.lisp”);这包含我正在处理的代码
3b)(加载“devhelper.lisp”)
4)(开发助手:开始)
5)此时seeervice正在运行,我可以对其进行测试。然后我对 myseervice.lisp 进行更改,以对其进行修改。要将代码交换到新版本,我只是梦想我可以:
6)(开发助手:重新加载)
但它在这一点上冻结了。
而且我并不坚持这个 devhelper 的想法,我只是想要一个更顺畅的开发周期。
一个真正的 lisper 会如何做到这一点?我对这一切都很陌生,我来自传统的编程背景;) 使用 IDE 和导入。