Common Lisp:`load` 会做`compile-file` 的事情吗?

Sal*_*Egg 5 load compilation common-lisp

假设我有一个名为“includes.cl”的文件,其中有几个函数定义。现在我有两种使用这些功能的方法:

  1. (load "includes.cl")
  2. (load (compile-file "includes.cl"))

后者比前者快吗?我只关心函数调用的运行速度。

sds*_*sds 5

要回答您提出的问题,无法先验地说出您的两种形式中的哪一种更快。但是,您的第二种形式可能会导致“includes.cl”中的函数和宏执行得更快。

更重要的一点,虽然,就像你不会重新编译C每次你的东西联系起来反对它时库,你不应该重新编译一个Lisp每前库load

至少你应该使用类似makeload-compile-maybe或 Lisp 类似物的东西,比如asdf

编辑:您使用的 SBCL 没有解释器,只有编译器。这意味着所有代码在执行之前都已编译,因此您问题中的两种形式是等效的。但是,大部分成本在 中compile-file,而不是在 中load,因此编译一次文件然后使用(load "includes")(注意缺少文件类型,AKA,扩展名)加载它是一个很好的主意。