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

4
我是一个新手,之前熟悉C和Python,现在使用Microsoft Windows下的Clozure Common Lisp学习Common Lisp。也许我的问题很愚蠢,请耐心帮助我。
1) 运行Common Lisp脚本的常规方法是什么?
现在,我在Windows下编写了一个批处理文件,调用ccl exe(wx86cl.exe),每次想要“运行”脚本时都会评估(progn (load "my_script_full_path") (ccl:quit))。这是运行Common Lisp脚本的标准方式吗?还有其他建议吗?
2) (require 'cxml)(asdf:operate 'asdf:load-op :cxml)有什么区别?
对于我的脚本,它们似乎是一样的,应该使用哪个?
3) 忽略它,不是一个清楚的问题
4) 当我想加载某些库(例如require 'cxml)时,每次“运行”脚本时总是需要花费时间(3秒甚至5秒)来加载cxml,还有很多日志输出到标准输出中,看起来像是检查某些内部内容。这是否意味着每次想要运行简单的测试时都必须花费3-5秒来加载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">
......
一些我的脚本输出
---添加更多内容---
5) 我必须说我几乎忘记了将图像转储以加速加载Lisp库的方式。那么,我们开发(可能非常简单的)Lisp脚本的正常过程是什么?
基于我现在得到的答案,我猜想可能是:
a) 编辑你的脚本
b) 通过REPL环境进行测试,SLIME是一个非常好的选择,并且应该有许多循环在a<==>b之间
c) 转储图像以分发它?(我不确定)
6) 此外,我们发布/分发最终程序的常见方式/形式是什么?

对于Lisp库,我们只需发布源代码,让其他人可以“加载/需要”它们。
对于Lisp程序,在确认所有功能都正常运行后,我们会转储图像以分发它。
我说的对吗?

在实际产品中我们使用什么形式?我们总是将所有东西都转储到一个图像中以加快加载速度吗?

4个回答

2
你不必每次想运行简单测试时都从头开始加载lisp。为了更高效的开发,可以在正在运行的lisp环境的监听器(REPL)中交互式地评估代码。

2

1) 是的,运行整个程序的正常方式是使用启动脚本。但是,如今Windows比批处理解释器拥有更好的脚本支持。Windows脚本宿主和PowerShell作为标准版发布。

1a) 在开发过程中,通常只需在REPL(读取-求值-输出循环,即lisp命令行)中输入内容,或者使用类似于SLIME(用于emacs或xemacs)的开发环境。如果你不知道它们是什么,请查询相关信息。您可能希望使用Cygwin来安装xemacs,这将让您使用一系列Linux风格的工具。

2) 如果我没记错,require是标准的一部分。ASDF技术上不是标准,而是一个操作库,可以更方便地使库工作。如果您真的要编写大型Lisp程序,则ASDF具有一堆功能,最终您肯定会需要。

3) 问题不明确,请跳过。

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

编辑:附加答案:

5) 是的

6) 一旦转储了映像,您仍然需要分发Lisp二进制文件以加载内存映像。为使用户无感知,您还必须拥有一个加载器脚本(或二进制文件),以带图像运行Lisp二进制文件。


1
我认为我们开发一个简单的Lisp脚本(不是库,只是用于完成简单功能的脚本)可能有两种方法:(A)独立编写脚本,没有任何REPL,并通过命令行运行/加载它来测试,这是我现在尝试使用的方式,每次加载库需要时间,但这种方式对于Python开发来说还可以,因为在Python中加载库足够快(B)使用REPL环境,例如SLIME,我确实使用过它,这可能是Lisp中更常见的一种方式。顺便问一下,我还有另一个问题。 - winterTTr
你有没有尝试过从Clozure CL创建可执行文件?Clozure CL可以创建可执行文件,无需脚本来加载图像。请参阅CCL:SAVE-APPLICATION`文档。 - Rainer Joswig
ASDF也包含在Clozure CL中。(require 'asdf)可以加载它。 - Rainer Joswig

1

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


0
关于分发 -
我写了一个例程(它在家里,现在不可用),它将当前图像写成标准可执行文件并退出。它适用于CLISP和SBCL。
如果您喜欢,我可以找到它。

我认为应该有与ccl:save-application相同的功能,我已经知道了,谢谢。我只是好奇在真正的Lisp开发中分发形式是什么。 - winterTTr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接