gpt4 book ai didi

common-lisp - 使用 (declare (type ...)) 但仍然有 'safe' 函数

转载 作者:行者123 更新时间:2023-12-04 14:26:09 25 4
gpt4 key购买 nike

是否可以使用 (declare (type ...))函数中的声明还要对函数参数执行类型检查,以生成更快但仍然安全的代码?

例如,

(defun add (x y)
(declare (type fixnum x y))
(the fixnum x y))

当被称为 (add 1 "a")会导致未定义的行为,所以最好我想把它修改为
(defun add (x y)
(declare (type fixnum x y))
(check-type x fixnum)
(check-type y fixnum)
(the fixnum x y))

但我担心编译器被允许假设 check-type总是通过,因此省略检查。

所以我的问题是,上面的例子是否如我所料是错误的,其次,是否有任何常见的习惯用法*用于通过优化代码实现类型安全?

*) 我可以想象,例如,使用优化的 lambda 并在进行类型检查后调用它,但我想知道这是否是最优雅的方式。

最佳答案

您始终可以先检查类型,然后输入优化代码:

(defun foo (x)
(check-type x fixnum)
(locally
(declare (fixnum x)
(optimize (safety 0)))
x))
LOCALLY用于本地声明。

关于common-lisp - 使用 (declare (type ...)) 但仍然有 'safe' 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32321054/

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