SHe*_*dez 4 lisp emacs sbcl common-lisp slime
我开始使用emacs和slime来开发一些小服务.
我找到了一种在更改后重新加载代码的方法,但我希望这更方便,更快捷.
这就是我现在的做法:
1)启动emacs,启动粘液,然后在粘液中:
2)(加载"init.lisp"); 加载一些不会改变的初始化代码
3)(加载"myseervice.lisp"); 这包含了我正在处理的代码
4)(myservice:start)
5)此时看门人正在运行,我可以测试它.然后我对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))
Run Code Online (Sandbox Code Playgroud)
我想我现在可以这样做:
1)启动emacs,启动粘液,然后在粘液中:
2)(加载"init.lisp"); 加载一些不会改变的初始化代码
3a)(加载"myseervice.lisp"); 这包含了我正在处理的代码
3b)(加载"devhelper.lisp")
4)(devhelper:开始)
5)此时看门人正在运行,我可以测试它.然后我对myseervice.lisp进行了修改,以修改它.为了将代码交换到新版本,我可以梦想:
6)(devhelper:重装)
但它在这一点上冻结了.
而且我并不坚持这个不合时宜的想法,我只想要一个更顺畅的开发周期.
一个真正的lisper怎么做呢?我对这一切都很陌生,我来自传统的编程背景;)使用IDE和导入.
历史
在SLIME/Emacs中重用以前的命令并不困难.
命令M-p并M-n获取上一个或下一个输入.M-r并M-s允许您在输入中搜索(使用正则表达式).
从缓冲区执行
另一种方法是将命令写入Lisp文件,在缓冲区中打开文件然后从那里执行它们.
刷新
你的重装想法没问题.您可以关闭服务,加载新代码并再次启动服务.你应该找出冻结的原因.你应该调试它.您的手册和编码版本之间的区别之一是:停止,加载和启动之间的时间比编码版本短得多.你应该检查是否有问题.
更高级的代码组织
通常,当您有多个文件时,使用一个或多个系统来组织代码是有意义的.如果您的代码位于使用文件编译器编译代码的文件中,那么它也是有意义的.这样您就可以在早期收到警告和错误.通常在Common Lisp开发人员中使用它ASDF作为系统工具.许多实现另外具有它们自己的(具有更多或更少的特征).
系统工具为您提供了一些可在系统上使用的命令:
通常它会发出编译或加载代码所需的最少量的命令.但是你可以强制它重新加载或重新编译一切.
通常,系统可以具有子系统.例如,子系统可以是编译服务.如果更改代码,请保存它和compile and load子系统.ASDF(或类似工具)将编译已更改的文件并加载它们.
更高级:为系统工具编写自己的命令,然后停止正在运行的服务,编译/加载更改,然后启动服务.
建议:
让你的版本继续下去,找出它挂起的原因.
| 归档时间: |
|
| 查看次数: |
1278 次 |
| 最近记录: |