我最近一直在阅读SBCL用户手册,并开始想知道标题问题.显然,一些lisps,例如clojure,禁止所有副作用,因此他们可以轻松地并行化代码.Common Lisp允许副作用,所以我想知道给定函数是"脏"还是"干净"的事实是否会影响它的编译.
例如,在CMUCL编译器手册中,让优化显示在许多情况下如何使用'let'绑定新变量比使用'setq'进行修改更有效.我想我在问是否为函数调用做了类似的事情.
我已经阅读了sbcl手册的相关部分,并在stackoverflow上提出了问题但无法找到答案.
简而言之: 没有更快。有时实际上更慢。
长的:
SBCL-devel 的 Stas Boukarev 表示,
SBCL 甚至不知道函数没有副作用,所以,不。而且,很多时候,有副作用才是最好的方法。
我知道这样一个事实nreverse,诸如 之类的破坏性函数往往比非破坏性函数更快(在本例中reverse是非破坏性版本)。他们也遇到了许多挫折。正如彼得·西贝尔所说:
每个回收功能都是一把指向脚部的装弹枪。
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |