【问题标题】:Running a Compiled Lisp Program运行已编译的 Lisp 程序
【发布时间】:2012-05-03 16:04:33
【问题描述】:

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

【问题讨论】:

    标签: emacs lisp common-lisp slime


    【解决方案1】:

    来自 SLIME REPL:

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

    或来自 SLIME 菜单:

    SLIME > 编译 > 编译\加载

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • 文件编译的编译模型略有不同。文件编译器可以进行更多优化,在某些情况下可能会生成更好的消息,并且可以在编译期间及早检测到一些错误。通常加载源文件很容易。我会建议较大的代码片段使用系统工具并加载已编译的代码。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-08-19
        • 1970-01-01
        • 2016-02-01
        • 2011-08-05
        • 1970-01-01
        • 2022-06-24
        • 1970-01-01
        • 2021-03-25
        • 2012-06-24
        相关资源
        最近更新 更多