7

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

4

3 回答 3

6

来自 SLIME REPL:

  1. ,cd将目录更改为您的 lisp 文件的目录
  2. (load (compile "filename.lisp"))

或从 SLIME 菜单:

SLIME > 编译 > 编译 \ 加载

所以基本上它非常简单,甚至还有一个菜单选项,我最初只是被命名法弄糊涂了。希望这将有助于将来的某人。

于 2012-04-23T02:09:09.500 回答
4

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

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

于 2012-04-27T00:28:40.210 回答
3

你的 lisp 实现会自动编译函数吗?OS X 上的 SBCL 对我有用。如果是这种情况,我认为除了在加载文件时节省编译时间之外,您不会从使用编译文件中看到任何好处。

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

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

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

为了节省编译时间,我使用了一种技术,将大部分包/稳定代码加载(自动编译)到核心文件中,这样当我从该核心文件开始并在.lisp 文件。

于 2012-04-23T04:02:05.970 回答