Are We There Yet - Rich Hickey
延伸阅读 2
字幕解读
Rich Hickey 追问常见面向对象语言为何难以表达时间:身份、某刻的状态与变化过程经常混在一起。他提出用不可变值表示状态、以纯函数产生后续值,再用明确的时间协调机制管理变化;观察者读取稳定快照,不必阻塞过程。后半段解释持久化数据结构的共享、CAS、agent 与 STM/MVCC 的不同职责,也讨论内存与写入成本。结尾明确这是进程内模型,外部世界和 I/O 的协调仍未解决。
自动字幕 · 引文按字幕原文展示,可点时间戳回看片段。
内容要点
- 值是不可变快照;身份是把一系列相关状态联系起来的概念,不能等同于一个原地改变的值。
- 观察和行动应分开;在所讨论的 STM/MVCC 模型中,读取快照不应进入写入者的变化序列。
- 按协调范围选择机制:CAS 管理单个身份,agent 加入异步序列,STM 协调多个身份;它们不是可无条件互换的工具。
视频章节 6
- 隐含复杂性与工具模型
从内存管理类比时间管理,讨论可变引用造成的推理负担。
- 值、身份、状态和时间
区别纯函数与长时间运行的过程,建立连续身份与不可变状态的模型。
- 观察与行动分离
以感知和快照作类比,提出原子状态演进与独立观察者。
- 高效保存不可变版本
介绍结构共享、持久化集合、并行变换与暂态构造的性能取舍。
- 协调时间与一致性快照
比较 CAS、agent、STM 和 MVCC,并区分整体快照与逐项扫描。
- 边界与问答
限定进程内,承认外部时间、I/O 和 GC 压力,不主张把整个系统当作纯函数。
具体观点与证据 3
应把身份、状态和值分开:身份串联因果相关的多个状态,每个状态是某时点不可变的值,而非随时变化的同一块数据。
Hickey 提出的进程内时间建模方式,不是对物理学的严格论证。
the state is a snapshot this entity has this value at this point in time持久化数据结构通过共享未变的树结构产生新版本,既保存旧快照,也避免完整复制数据。
仍有分配和写路径复制成本,不保证所有操作都快于可变数组。
the next version of the value shares a lot of structure with the prior version多版本并发控制保留历史让读取不阻塞写入,感知应读取一致的过去快照而不是强迫整个过程停下来。
这里只讨论进程内模型;讲者明确把外部 I/O 协调列为未解决问题。
multi-version concurrency control is that readers don't impede writers补充字幕原文 2
值是不可变快照;身份是把一系列相关状态联系起来的概念,不能等同于一个原地改变的值。
key characteristic of a value is that it's immutable观察和行动应分开;在所讨论的 STM/MVCC 模型中,读取快照不应进入写入者的变化序列。
this box right perception does not interfere with process解读边界
自动英语字幕未做音频核验,CAS 被写成 Kaz/cast/calves,STM 也出现 SDM 等误识别。 Whitehead、感知与物理时间用于启发模型;讲者明确承认简化,不能当作科学论证。 部分问答只录入讲者回答,听众问题不完整;不能重建未转录的问题。 保留不可变版本不自动等于永久保存所有历史;讲者提到 GC 可清除不再引用的过去。