Identity, State and Values
Clojure separates values (immutable data), identities (stable references that refer to different values over time), and state (the value of an identity at a point in time).
Uncoordinated (one identity) Most application state Coordinated (multiple identities, STM) Consistent multi-reference changes
Background state updates, serialized side effects Thread-local dynamic binding Configuration, global definitions None (single thread) Fast mutable box inside transducers
All reference types are read with deref / @, support validators and watches, and are updated with pure functions (swap!, alter, send), so readers always see consistent snapshots.