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返回一个新指针,该指针可能包含指向前一个数据结构子集的指针(在树中,例如,我们将指向其子树未因结果而发生变化的节点)操作).
归档时间: |
|
查看次数: |
9104 次 |
最近记录: |