Mic*_*rus 6 common-lisp compiler-optimization
是否可以(declare (type ...))在函数中使用声明,还可以对函数参数执行类型检查,以便生成更快但仍然安全的代码?
例如,
(defun add (x y)
(declare (type fixnum x y))
(the fixnum x y))
Run Code Online (Sandbox Code Playgroud)
当被调用时(add 1 "a")会导致未定义的行为,所以我最好将其修改为
(defun add (x y)
(declare (type fixnum x y))
(check-type x fixnum)
(check-type y fixnum)
(the fixnum x y))
Run Code Online (Sandbox Code Playgroud)
但我担心编译器可以假设check-type总是通过,因此省略了检查.
所以我的问题是,上面的例子是错误的,因为我期望它,其次,是否有任何常见的习惯用法*用于实现优化代码的类型安全?
*)我可以想象,例如,使用优化的lambda并在进行类型检查后调用它,但我想知道这是否是最优雅的方式.
您始终可以先检查类型,然后输入优化代码:
(defun foo (x)
(check-type x fixnum)
(locally
(declare (fixnum x)
(optimize (safety 0)))
x))
Run Code Online (Sandbox Code Playgroud)
该LOCALLY用于本地声明.
| 归档时间: |
|
| 查看次数: |
366 次 |
| 最近记录: |