为什么没有更多的语言使用像 Clojures 这样的不可变模型?
Why don't more languages use an immutable model like Clojures?
我对 clojure 如何处理不可变对象的大部分理解来自 this。这对我来说真的很聪明;它使诸如复制和更改一个值或将新值添加到集合末尾之类的事情几乎与可变对象一样快。然而,据我了解,许多(如果不是大多数)其他严重依赖不可变的语言不使用这种结构(Haskell、Scala 等)。这是为什么?这种树结构是否有一些我遗漏的缺点,或者只是一个相对较新的想法?
简短的回答是你的理解是错误的。您所指的这种数据结构称为 persistent,几乎所有函数式编程语言都大量使用它们至少几十年了,包括 Scala 和 Haskell.
它们仍然没有被大量使用的地方主要是在命令式语言中,这些语言也在事后才进行函数式编程。这就是为什么尝试 "go immutable" 在这些语言中的效率通常比在主要功能性语言中低得多。
我对 clojure 如何处理不可变对象的大部分理解来自 this。这对我来说真的很聪明;它使诸如复制和更改一个值或将新值添加到集合末尾之类的事情几乎与可变对象一样快。然而,据我了解,许多(如果不是大多数)其他严重依赖不可变的语言不使用这种结构(Haskell、Scala 等)。这是为什么?这种树结构是否有一些我遗漏的缺点,或者只是一个相对较新的想法?
简短的回答是你的理解是错误的。您所指的这种数据结构称为 persistent,几乎所有函数式编程语言都大量使用它们至少几十年了,包括 Scala 和 Haskell.
它们仍然没有被大量使用的地方主要是在命令式语言中,这些语言也在事后才进行函数式编程。这就是为什么尝试 "go immutable" 在这些语言中的效率通常比在主要功能性语言中低得多。