【问题标题】:Which term to use when referring to functional data structures: persistent or immutable?提到功能性数据结构时使用哪个术语:持久性或不可变?
【发布时间】:2010-03-24 17:13:29
【问题描述】:

在函数式编程的上下文中,哪个是正确的术语:持久性还是不可变?当我在 Google 上搜索“不可变数据结构”时,我收到了 Wikipedia link 到一篇关于“持久数据结构”的文章,该文章甚至继续说:

这样的数据结构是有效的 不可变

这进一步让我感到困惑。函数式程序是依赖持久数据结构还是不可变数据结构?还是它们总是一样的?

【问题讨论】:

    标签: language-agnostic functional-programming terminology


    【解决方案1】:

    函数式数据结构的正确术语是不可变。 “持久”一词至少以三种方式使用:

    • 持久数据结构是指你有一个旧的数据结构,你创建一个新的,但你保留一个指向旧的指针的情况。通常,旧的和新的共享很多状态——它们的区别可能仅在于恒定数量的堆对象,或者可能是线性数量的堆数据结构。这种持久性是具有不可变数据结构的结果,加上一个算法,它保留指向旧版本数据结构的指针,允许它们持久化。

    • 持久变量是一个值在同一程序的多次调用中保持不变的变量。这可以通过语言功能或库来完成。

    • 一种持久性编程语言是一种提供持久性变量的语言。圣杯是正交持久性:程序员可以决定一个变量是否是持久性的,独立于该变量的所有其他属性。目前,这种编程语言的研究还很遥远,但保留术语区别很有用。

    我今天不想编辑维基百科 :-(

    【讨论】:

      【解决方案2】:

      持久性数据结构在更改后仅保留其先前版本。取决于持久数据结构的类型...您可能会也可能不会修改以前的版本。

      不可变类型根本无法更改。

      函数式语言主要依靠不可变类型(也称为值)来存储数据(即使您可以在某些情况下使用可变类型……但必须明确地完成)。

      【讨论】:

      • 另外,值得注意的是不变性是函数式编程的核心概念。确保表达式或函数不会更改整个程序状态至关重要,这是引用透明性的一个重要方面。
      • 我不同意,有不同程度的坚持。
      【解决方案3】:

      文章还说“在纯函数式程序中,所有数据都是不可变的”,这是真的。

      在我看来,您实际上并不需要做出这种区分。如果您正在使用函数式语言或完全函数式风格进行编程——而不是在方便的命令式代码中使用函数式惯用语——那么你可以只说“数据结构”。根据定义,它们将是不可变的和持久的。

      如果您出于某种原因需要进行区分,那么“持久”可能更适合动态结构,例如树和队列,其中值似乎会根据执行跟踪“更改”,而“不可变”则适用于简单的值对象.

      【讨论】:

        【解决方案4】:

        不可变通常意味着“不改变”。持久性通常意味着“存储在永久存储介质上”。但是,您提到的维基百科文章似乎将这两个词的意思非常相似(但不完全相同)。事实上它指出:

        持久化数据结构不是提交给持久化存储的数据结构,比如磁盘;这是“持久”一词的不同含义。

        【讨论】:

          【解决方案5】:

          “不可变”的使用频率更高,因为“持久”被重载(通常意味着“存储在程序之外并超出程序的寿命”),即使是正确的定义也会带来额外的语义包袱,这通常与纯粹的区分质量无关函数式编程——没有可变状态的事实。 A = A 并且始终适用于 A 的所有值。

          【讨论】:

            【解决方案6】:

            this article 中,作者使用“持久”一词来表示“观察上不可变,尽管在后台通过突变实现”。在这种特殊情况下,突变被功能性而非纯编程语言的模块系统隐藏。

            【讨论】:

              猜你喜欢
              • 2017-03-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多