我是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“运行”脚本的标准方法吗?
还有其他任何建议吗?
2)
(require 'cxml)
和(asdf:operate 'asdf:load-op :cxml)
之间有什么区别?
我的脚本似乎是一样的,我应该使用哪一个?
3)忽略它,不是一个明确的问题
4)当我想加载一些库(例如require'cxml)时,每当我“运行”我的脚本时,加载cxml总是需要时间(3s甚至5s),还有很多日志标准输出我在下面显示,似乎检查内部的东西。这是否意味着每次我想要运行一个简单的测试时,我必须花费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库的加载速度。那么,我们开发一个(可能非常简单的)lisp脚本的正常过程是什么?
根据我现在得到的答案,我想也许是
a)编辑脚本
b)通过REPL环境测试它,SLIME是一个非常好的选择,并且&lt; ==&gt;之间应该有很多循环。 b
c)转储图像以进行分发?(我对此不确定)
6)此外,我们发布/分发最终节目的常用方式/形式是什么?
对于lisp库,我们只是发布我们的源代码,让别人可以“加载/要求”它们 对于lisp程序,当我们确认所有功能都顺利时,我们会转储图像以进行分发 我是对的吗?
我们在实际产品中使用什么形式?我们是否总是在最后将所有东西都放入图像中以加快加载速度?
答案 0 :(得分:2)
每次要运行简单测试时,都不必从头开始执行lisp并重新加载所有内容。为了更有效的开发,以交互方式评估正在运行的lisp环境的侦听器(REPL)中的代码。
答案 1 :(得分: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二进制文件。
答案 2 :(得分:1)
为了分发,我使用Zachary Beane的Buildapp工具。非常容易安装和使用。
答案 3 :(得分:0)
关于分发 -
我写了一个例程(它在家里,目前不可用),将当前图像写为标准可执行文件并退出。它适用于CLISP和SBCL。
如果你愿意,我可以翻找它。