gpt4 book ai didi

common-lisp - sbcl 在优化时是否考虑函数是否有副作用?

转载 作者:行者123 更新时间:2023-12-04 02:44:24 25 4
gpt4 key购买 nike

我最近一直在阅读 SBCL User Manual并开始想知道标题问题。
显然,一些 lisp,例如 clojure,禁止所有副作用,因此它们可以轻松地并行化代码。 Common Lisp 允许副作用,所以我想知道给定函数是“脏”还是“干净”的事实是否会影响它的编译。

例如 the CMUCL compiler manual let 优化表明,在许多情况下,使用“let”绑定(bind)新变量将比使用“setq”修改更有效。我想我在问是否对函数调用做了类似的事情。

我已经阅读了 sbcl 手册的相关部分,并在 stackoverflow 上提出了问题,但找不到答案。

最佳答案

短:
不是更快。有时实际上更慢。

长:

根据 SBCL-devel 的 Stas Boukarev 所说,

SBCL doesn't even know that a function has no side effects, so, no. Besides, most of the time having side effects is the most optimal way.



我知道 nreverse 等功能,它们是破坏性的,往往比非破坏性函数更快(在这种情况下, reverse 是非破坏性版本)。他们也带来了许多挫折。正如彼得·西贝尔所说:

Each recycling function is a loaded gun pointed footward.

关于common-lisp - sbcl 在优化时是否考虑函数是否有副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17650709/

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