如何在开发中的SLIME中快速重新加载和重新启动

时间:2012-06-24 14:11:52

标签: emacs lisp common-lisp slime sbcl

我开始使用emacs和slime来开发一些小服务。

我找到了一种在更改后重新加载代码的方法,但我希望这更方便,更快捷。

这就是我现在的做法:

  • 1)启动emacs,启动粘液,然后在粘液中:

    2)(加载“init.lisp”);加载一些没有的初始化代码 变化

    3)(加载“myseervice.lisp”);这包含了我的代码

    4)(myservice:start)

    5)此时看门人正在跑步,我可以测试它。然后我 更改myseervice.lisp,进行修改。要将代码交换为 新版本我这样做:

    6)(myservice:stop)

    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)(加载“myseervice.lisp”);这包含了我的代码

    3b)(加载“devhelper.lisp”)

    4)(devhelper:开始)

    5)此时看门人正在跑步,我可以测试它。然后我 更改myseervice.lisp,进行修改。要将代码交换为 新版本我梦想我能做到:

    6)(devhelper:reload)

但此时它冻结了。

我并不是坚持这个不合时宜的想法,我只是想要一个更顺畅的开发周期。

真正的lisper怎么做?我对这一切都很陌生,我来自传统的编程背景;)使用IDE和导入。

1 个答案:

答案 0 :(得分:5)

<强>记录

在SLIME / Emacs中重用以前的命令并不困难。

命令M-pM-n获取上一个或下一个输入。 M-rM-s允许您在输入中搜索(使用正则表达式)。

从缓冲区执行

另一种方法是将命令写入Lisp文件,在缓冲区中打开文件,然后从那里执行它们。

<强>刷新

你的重装想法没问题。您可以关闭服务,加载新代码并再次启动服务。你应该找出冻结的原因。你应该调试它。您的手册和编码版本之间的区别之一是:停止,加载和启动之间的时间比编码版本短得多。你应该检查是否有问题。

更高级的代码组织

通常,如果您有多个文件,则使用一个或多个系统来组织代码是有意义的。如果您的代码位于使用文件编译器编译代码的文件中,那么它也是有意义的。这样您就可以在早期收到警告和错误。通常在Common Lisp中,开发人员使用ASDF作为系统工具。许多实现还有其自己的(具有更多或更少的功能)。

系统工具为您提供了一些可在系统上使用的命令:

  • load:加载编译或源代码(如果需要)(或强制)
  • 编译:必要时(或强制)编译代码
  • 编译并加载:必要时(或强制)编译并加载代码......

通常它会发出编译或加载代码所需的最少量的命令。但是你可以强制它重新加载或重新编译所有内容。

通常,系统可以有子系统。例如,子系统可以是编译服务。如果更改代码,请将其保存并compile and load子系统。 ASDF(或类似工具)将编译已更改的文件并加载它们。

更高级:为系统工具编写自己的命令,然后停止正在运行的服务,编译/加载更改,然后启动服务

<强>建议:

让你的版本继续下去,找出它挂起的原因。