我正在构建一些其他人编写的旧 Common Lisp 代码,其中包括一些函数开头的如下行:
(declare (ftype (function (&rest float) float) + - * min max))
我的理解是这样做的目的是告诉编译器表格末尾列出的五个函数只会传递浮点数。编译器可以使用此信息来创建更高效的代码。
一些 Lisps 不会抱怨这个声明(ABCL、CCL、ECL、LispWorks、CLISP),但是 SBCL 在默认配置中不会接受这个声明。SBCL 可以通过放置来接受它
(unlock-package 'common-lisp)
在 .sbclrc 初始化文件中。这就是我过去一年左右一直在做的事情。我认为这是必需的,因为 +、- 等位于该包中,并且代码会更改这些函数的声明。
我的问题是:声明 + 和 min 等内置函数的函数类型可以对 SBCL 中的编译代码产生有益的影响吗?(如果可以,那么为什么 SBCL 默认会抱怨这些声明?)我最好删除此类 ftype 声明,然后删除unlock-package
.sbclrc 中的行吗?
谢谢。