持久性与不可变数据结构

Bob*_*r02 18 immutability object-persistence data-structures

持久性和不可变数据结构有什么区别吗?维基百科在讨论持久性时指的是不可变数据结构,但我觉得两者之间可能存在细微差别.

jba*_*ple 22

不变性是一种实现技术.除此之外,它提供了持久性,这是一个接口.持久性API类似于:

  • version update(operation o, version v)o对版本执行操作v,返回新版本.如果数据结构是不可变的,则新版本是新结构(可以共享旧结构的不可变部分).如果数据结构不是不可变的,则返回的版本可能只是版本号.该版本v仍然是有效版本,并且observe由于此更新,它不应以任何方式更改- 更新仅在返回的版本中可见,而不是在v.
  • data observe(query q, version v)在版本中观察数据结构v而不更改它或创建新版本.

有关这些差异的更多信息,请参阅:


Sam*_*ahl 15

是,有一点不同.创建后不能以任何方式修改不可变数据结构.有效修改它的唯一方法是制作一个可变副本或类似的东西(例如,稍微修改传递给新构造函数的参数).另一方面,持久性数据结构在暴露的API似乎允许更改数据结构的意义上是可变的.但事实上,任何更改都将保留指向现有数据结构的指针(因此也包含每个前面的结构); 它们似乎只是改变了数据结构,因为暴露的API返回一个新指针,该指针可能包含指向前一个数据结构子集的指针(在树中,例如,我们将指向其子树未因结果而发生变化的节点)操作).