Configuration 如何使用Clozure Common Lisp(在Microsoft Windows上)创建应用程序

Configuration 如何使用Clozure Common Lisp(在Microsoft Windows上)创建应用程序,configuration,build,common-lisp,ccl,Configuration,Build,Common Lisp,Ccl,我是Common Lisp(在Microsoft Windows下使用Clozure Common Lisp)的新手,以前熟悉c和python。也许这里的问题很愚蠢,但请耐心地给我一些帮助 1) 运行公共lisp脚本的常用方法是什么 现在,我在windows下编写了一个bat文件,每当我想“运行”我的脚本时,调用ccl exe(wx86cl.exe)并计算(progn(加载“我的脚本”\u完整路径”)(ccl:quit))。这是“运行”common lisp脚本的标准方法吗? 关于这件事还有其他

我是Common Lisp(在Microsoft Windows下使用Clozure Common Lisp)的新手,以前熟悉c和python。也许这里的问题很愚蠢,但请耐心地给我一些帮助

1) 运行公共lisp脚本的常用方法是什么

现在,我在windows下编写了一个bat文件,每当我想“运行”我的脚本时,调用ccl exe(wx86cl.exe)并计算
(progn(加载“我的脚本”\u完整路径”)(ccl:quit))
。这是“运行”common lisp脚本的标准方法吗?
关于这件事还有其他建议吗

2)
(需要'cxml)
(asdf:operation'asdf:load op:cxml)
之间有什么区别

它们似乎与我的脚本相同,我应该使用哪一个

3) 忽略它,这不是一个明确的问题

4) 当我想加载一些库(比如require'cxml)时,每次“运行”脚本时加载cxml总是需要时间(3秒甚至5秒),下面显示的标准输出也有很多日志,这似乎是在检查内部内容。这是否意味着每当我想运行一个简单的测试时,我必须花费3-5秒来加载cxml?看起来效率有点低,而且输出噪音很大。有什么建议吗

我的剧本
(需要“cxml”(某些代码使用cxml)

和输出
;将系统定义从D:/_play_/lispbox-0.7/quicklisp/dists/quicklisp/software/cxml-20101107-git/cxml.asd加载到35;
;;; 正在检查宽字符支持。。。是,使用代码点。
; 注册#
……
我的一些脚本输出

---编辑以添加更多----

5) 我必须说,我几乎忘记了转储图像以加快lisp库加载速度的方法。那么,我们开发(可能非常简单)lisp脚本的正常过程是什么

根据我现在得到的答案,我想可能
a) 编辑脚本
b) 通过REPL环境进行测试,SLIME是一个非常好的选择,a和b之间应该有很多循环
c) 转储图像以分发它?(我对此不确定)

6) 此外,我们发布/分发最终计划的常见方式/形式是什么

对于lisp库,我们只需发布源代码,让其他人可以“加载/要求”它们。
对于lisp程序,当我们确认所有功能正常时,我们会转储一个图像以分发它。
我说得对吗


我们在真正的产品中使用什么形式?我们是否总是在最终将所有内容转储到图像中以加快加载速度?

您不必从头开始lisp,每次运行简单测试时都重新加载所有内容。为了提高开发效率,以交互方式评估正在运行的lisp环境的侦听器(REPL)中的代码。1)是的,运行整个程序的正常方法是使用启动程序脚本。然而,windows现在有比bat解释器更好的脚本支持。Windows脚本主机和PowerShell作为标准配置提供

1a)在开发过程中,通常只需在REPL(Read-Eval-Print循环,即lisp命令行)中键入内容,或者使用SLIME(对于emacs或xemacs)之类的东西作为开发环境。如果你不知道它们是什么,查一下。您可能希望使用Cygwin安装xemacs,这将使您能够访问一系列linux-ish工具

2) Require是IIRC标准的一部分。从技术上讲,ASDF不是,它是一个使图书馆工作更方便的图书馆。如果你真的开始编写大型Lisp程序,ASDF有一系列你最终想要的特性

3) 问题不清楚,通过

4) 请参见1a)-在运行的实例中进行测试和修改,从而避免多次加载库的需要(就像在Python中一样,您找到了Python repl,对吗?)。此外,当您的程序完成时,您可能可以转储一个预加载了所有库的映像

编辑:其他答案:

5) 对


6) 转储映像后,仍然需要分发lisp二进制文件以加载内存映像。为了让这对用户透明,您还必须有一个加载程序脚本(或二进制文件)来运行带有图像的lisp二进制文件。

关于分发-

我编写了一个例程(它在家中,目前不可用),将当前图像作为标准可执行文件写入并退出。它适用于CLISP和SBCL


如果你愿意,我可以把它翻出来

对于分发,我使用Zachary Beane的工具。非常易于安装和使用。

我认为开发一个简单的lisp脚本可能有两个过程(不是一个库,只是一个实现简单功能的脚本)。(A) 在没有任何REPL的情况下单独编写脚本,每次都通过命令行运行/加载来测试它,我现在尝试使用它,每次加载库都需要时间,但是这种方式对于python开发来说是可以的,因为加载库在python中足够快(B)使用REPL环境,例如SLIME,我确实使用它,这可能是lisp更常见的方法。对吗?顺便说一句,我还添加了另一个问题:您是否确实尝试过从Clozure CL创建可执行文件?Clozure CL可以创建可执行文件。不需要脚本来加载图像。请参阅CCL:SAVE-APPLICATION的文档。ASDF也包含在Clozure CL中。
(require'ASDF)
加载它。我认为这应该是与CCL:SAVE-APPLICATION相同的功能,我已经知道了,谢谢。我只是想知道在真正的lisp开发中的分布形式是什么。