(David James写了这个问题和答案。我会编辑它以符合Stackoverflow标准。)
使用SBCL,您可以将Lisp代码编译为机器代码。
与Java,.net,C ++甚至C类似,您将需要运行时。因此,有两种方法可以编译Common Lisp代码。
首先是制作巨大的二进制文件,这在SBCL文档中有解释。目标机器上不需要SBCL。
另一种方式是更灵活的方法,即以fasl(FASt Load)格式创建机器代码。目标计算机上需要SBCL运行时。
第二种方式如何在类Unix操作系统下工作?
答案 0 :(得分:25)
(David James回答:)
我们将在我们的系统中创建两个命令:一个用于批量编译Lisp代码,另一个用于轻松运行Lisp代码:
使用您喜欢的编辑器,打开一个名为sbcl.compile
的文件。内容应该是:
#!/bin/bash
sbcl --noinform --eval "(compile-file \"$1\")" --eval "(quit)" > /dev/null
现在编译Lisp文件使用:
# sbcl.compile hello.lisp
这将创建一个hello.fasl
文件。
现在,为了轻松运行这些文件,我们创建了一个新命令。使用您喜欢的编辑器打开一个名为sbcl.run
的文件。内容应该是:
#!/bin/bash
sbcl --noinform --load "$1" --quit --end-toplevel-options "$@"
现在您可以调用sbcl.run hello.fasl
来运行本机代码。
# sbcl.run hello.fasl
详情见SBCL手册:Starting SBCL
答案 1 :(得分:3)
另一种选择是向运行时添加常用的所有包/函数/框架,然后将此状态保存为新的核心文件,并在继续开发时将其用作默认核心。我经常发现fasls比它们的价值更麻烦,特别是因为lisp能够在VM风格的核心文件中保存状态。随着开发的进展,我只是逐步更新核心。并使用GNU Make重建/更新核心。