【发布时间】:2013-07-15 09:19:56
【问题描述】:
我最近一直在阅读SBCL User Manual 并开始想知道标题问题。 显然,一些 lisp,例如 clojure,禁止所有副作用,因此它们可以轻松地并行化代码。 Common Lisp 允许副作用,所以我想知道给定函数是“脏”还是“干净”的事实是否会影响它的编译。
例如在the CMUCL compiler manual 中,let 优化展示了在许多情况下使用“let”绑定新变量将比使用“setq”修改更有效。我想我是在问是否对函数调用做了类似的事情。
我已阅读 sbcl 手册的相关部分,并在 stackoverflow 上提出了问题,但找不到答案。
【问题讨论】:
-
Clojure 不会(不能)禁止所有副作用。例如
(println "Hello World")是一个副作用。要完全禁止他们,他们要么需要 1. 不使用该语言。 2. 被一个非常强大的类型系统分隔。其他任何事情都意味着停机问题 -
谢谢,我应该更清楚一点。
-
将您的问题写入 sbcl-devel 邮件列表。如果您向他们提出一个好而明确的问题,我相信他们会给您一个好的答案。
-
@PaulNathan:干杯我会再读一些,然后可能会这样做。
-
@Baggers 如果您的问题已得到解答,请将其作为此问题的答案发布。
标签: common-lisp sbcl