运行编译的Lisp程序

时间:2012-04-23 01:45:13

标签: emacs lisp common-lisp slime

我猜这不是火箭科学,但我如何运行已编译的lisp文件?我在Windows下使用emacs和SLIME。从SLIME菜单可以很容易地编译文件,一旦它完成,它会在与我的lisp源相同的目录中吐出一个wx64fsl。如何加载/运行此文件?我通过评估整个代码块来运行文件,并且我被告知运行编译版本的性能要好得多。

3 个答案:

答案 0 :(得分:5)

来自SLIME REPL:

  1. ,cd将目录更改为包含lisp文件的目录
  2. (load (compile "filename.lisp"))
  3. 来自SLIME菜单的OR:

    SLIME>编译>编译\加载

    所以基本上它非常简单,甚至有一个菜单选项,我最初只是被术语混淆了。希望这将有助于未来的人。

答案 1 :(得分:3)

您的lisp实现是否自动编译功能? OS X上的SBCL适合我。如果是这种情况,我认为除了在加载文件时节省编译时间之外,您不会看到使用编译文件的任何好处。

取自CLHS并在我的REPL设置上测试的示例:

(defun f (x) x)
F
> 
(compiled-function-p #'f)
T
> 

在实践中,我一直只使用.lisp文件。从来没有投入时间使用Make作为构建工具来自动编译lisp源代码,因为它发生了变化。除了节省编译时间(不加快运行时间)之外,至少在我的设置上,我还没有看到使用编译的fasls带来的任何实际好处。

为了节省编译时间,我使用了一种技术,其中大多数软件包/稳定代码被加载(自动编译)到核心文件中,因此当我开始使用该核心文件并测试一些时,编译时间是最小的.lisp文件中的新代码。

答案 2 :(得分:3)

(LOAD "whatever")通常会加载并编译 whatever.lisp ,除非编译的文件已经存在,并且具有相同的名称和特定于实现的扩展名。这些文件使用(COMPILE-FILE "whatever.lisp")生成,或使用密钥C-c C-k生成使用SLIME的emacs。

正如Rainer所建议的那样,您可能应该使用ASDF来定义您的系统,而且肯定是quicklisp来管理依赖关系和安装包。我还建议使用 quickproject 来创建项目模板。您可以使用quicklisp轻松安装它。