gpt4 book ai didi

performance - 使用 'optimize' 公告

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:45 26 4
gpt4 key购买 nike

为了提高我的 Lisp 程序的效率,我想在我的代码中插入这一行:

(optimize (speed 3) (safety 0) (debug 0) (space 0))

目前我认为我应该把它放在每个文件的顶部。这是一个好主意还是我应该将这一行插入一个特定的地方? (我使用 ASDF 进行系​​统定义。)

我问题的另一部分:(safety 0) 安全吗?我的函数很少使用变量类型的显式声明,其他函数会怎样?我是否应该省略 (safety 0) 以避免由于缺少类型检查而可能发生的问题?

最佳答案

我会避免全局设置编译策略,因为 "as with other defining macros, it is unspecified whether or not the compile-time side-effects of a declaim persist after the file has been compiled" .如果你真的想为每个文件使用全局策略,你可以使用 locally special form在顶级(顶级 locally 的子表单仍然是顶级表单)

(locally (declare (optimize speed #| ... whatever ... |#))

(defun compute-foo (x)
(1+ x))

(defun compute-bar (y)
(* (compute-foo y) y)))

代替

(declaim (optimize speed #| ... whatever ... |#))
...

甚至

(proclaim '(optimize speed #| ... whatever ... |#)) 

我倾向于谨慎使用声明,通常只在函数内局部使用,即

(defun compute-foo (x)
(declare (fixnum x))
(1+ x))

许多现代 Lisp 编译器(如 SBCL)已经非常擅长识别类型。此外,我永远不会使用 (safety 0)在全局范围内,因为这可能是危险的,特别是在开发过程中,当事情还没有真正稳定下来并且错误很常见时。

关于performance - 使用 'optimize' 公告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24504404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com