TL;DR
- 状態とはある時点での同一実体(identity)の値である。Clojure は同一実体と値を明確に区別し、ほぼすべてのものを値として扱う。
- 状態の変更は ref(協調的かつ同期的)、atom(非協調的かつ同期的)、agent(非同期的)、var(スレッドローカル)の 4 つの参照型で管理する。
- ref、atom、agent は、直前の状態を更新関数に渡して新しい状態を得る、統一された更新モデルに従う。
内容
ロックを扱う複雑さを避けるために Clojure が用意した 4 つの参照型と、それらに共通する更新モデルを扱う。各節のまとめは次のページにある。
- Programming Clojure, Third Edition 第6章 同一実体と値
- Programming Clojure, Third Edition 第6章 並行性・並列性・ロック
- Programming Clojure, Third Edition 第6章 ref と STM
- Programming Clojure, Third Edition 第6章 atom を用いた非協調的かつ同期的な更新
- Programming Clojure, Third Edition 第6章 agent を用いた非同期的な更新
- Programming Clojure, Third Edition 第6章 var でスレッドごとの状態を管理
- Programming Clojure, Third Edition 第6章 Clojure におけるモデルのまとめ