gpt4 book ai didi

common-lisp - Common Lisp 中的 "open code"是什么意思?

转载 作者:行者123 更新时间:2023-12-04 14:01:05 27 4
gpt4 key购买 nike

在 SBCL 用户手册中,多次提到术语“open code”。 Common Lisp 黑客在提到优化代码时也使用这个术语。

你能解释一下“打开代码”是什么意思,并举例说明它是如何工作的吗?

最佳答案

什么

Open-coding, AKA inlining , 表示用内联汇编替换函数调用。
这个想法是funcall是昂贵的(它需要保存和恢复堆栈&c)并用构成函数的少数操作替换它可能是有益的。

例如,函数 1+当参数是 fixnum 时是一条指令(在实践中通常是这样),因此将函数调用转换为两个并行分支(fixnum 和其他)将是一个胜利。

控制

声明

他们的用户可以通过 inline 显式控制此优化。宣言。

用户还可以通过 optimize 影响此优化。宣言。

两者都会影响内联定义为函数的函数的代码(见下文)。



“旧”方法是将函数实现为宏。例如,代替

(defun last1f (list)
(car (last list)))


(defmacro last1m (list)
`(car (last ,list)))

last1m将始终是开放编码的。这种方法的问题是你不能使用 last1m作为一个函数 - 你不能把它传递给,比如说, mapcar .

因此 Common Lisp 有另一种方式 - compiler macros ,它告诉编译器如何在编译之前转换表单:
(define-compiler-macro last1f (list)
`(car (last ,list)))

另请参阅上述 CLHS 页面中的优秀示例。

关于common-lisp - Common Lisp 中的 "open code"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940426/

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