4

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

1) 运行普通 lisp 脚本的常用方法是什么?

现在,我在 windows 下编写了一个 bat 文件来调用 ccl exe(wx86cl.exe) 并(progn (load "my_script_full_path") (ccl:quit))在每次我想“运行”我的脚本时进行评估。这是“运行”普通 lisp 脚本的标准方法吗?
对此有何其他建议?

(require 'cxml)2)和有什么区别(asdf:operate 'asdf:load-op :cxml)

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

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

4)当我想加载一些库(例如require'cxml)时,每次“运行”我的脚本时总是需要时间(3s甚至5s)来加载cxml,我显示的标准输出也有很多日志下面,似乎在检查内部的东西。是不是意味着每次想运行一个简单的测试都得花 3-5s 来加载 cxml?这似乎有点低效,输出很嘈杂。有什么建议吗?

我的脚本 (require 'cxml) (some-code-using-cxml)

和输出
; Loading system definition from D:/_play_/lispbox-0.7/quicklisp/dists/quicklisp/software/cxml-20101107-git/cxml.asd into #<Package "ASDF0">
;;; Checking for wide character support... yes, using code points.
; Registering #<SYSTEM "cxml-xml">
......
some my script output

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

5) 不得不说,为了加快lisp库的加载速度,我差点忘记了dump image的方式。那么,我们开发(可能很简单)lisp 脚本的正常流程是什么?

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

6) 此外,我们发布/分发最终程序的常用方式/形式是什么?

对于一个 lisp 库,我们只是发布我们的源代码,让其他人可以“加载/要求”它们。
对于 lisp 程序,当我们确认所有功能都运行良好时,我们会转储图像以分发它。
我对吗?

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

4

4 回答 4

2

每次您想运行一个简单的测试时,您不必从头开始启动 lisp 并重新加载所有内容。为了更高效的开发,在运行的 lisp 环境的侦听器 (REPL) 中以交互方式评估代码。

于 2011-04-14T20:06:57.207 回答
2

1) 是的,运行整个程序的正常方法是使用启动器脚本。然而,如今,windows 的脚本支持比 bat 解释器要好得多。Windows Scripting Host 和 PowerShell 作为标准提供。

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

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

3)问题不清楚,通过。

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

编辑:附加答案:

5) 是的

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

于 2011-04-14T21:20:27.007 回答
1

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

于 2011-05-13T04:54:45.980 回答
0

关于分配——

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

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

于 2011-04-15T15:38:33.930 回答