如何以方便的方式在类Unix操作系统下运行SBCL代码?

时间:2012-01-29 18:26:34

标签: lisp common-lisp sbcl

(David James写了这个问题和答案。我会编辑它以符合Stackoverflow标准。)

使用SBCL,您可以将Lisp代码编译为机器代码。

与Java,.net,C ++甚至C类似,您将需要运行时。因此,有两种方法可以编译Common Lisp代码。

首先是制作巨大的二进制文件,这在SBCL文档中有解释。目标机器上不需要SBCL。

另一种方式是更灵活的方法,即以fasl(FASt Load)格式创建机器代码。目标计算机上需要SBCL运行时。

第二种方式如何在类Unix操作系统下工作?

2 个答案:

答案 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重建/更新核心。