Video summary
In Context - Rich Hickey (Clojure/Conj 2026)
Main summary
Key takeaways
Summary
Rich Hickey argues that software correctness has two dimensions: consistency within a program and agreement with facts in the outside world. Static types and other static techniques can be useful, particularly for mechanisms a program invents and controls. But information-oriented applications—systems that process events, use databases, call external services, and evolve across teams—must handle information whose shape and requirements can change.
He describes Clojure’s information-oriented approach: use named, flexible data structures such as maps, and avoid turning every change in information into a change to a rigid mechanism or schema. This can make systems easier to adapt, inspect, and divide into independently changing parts. The tradeoffs include potentially lower performance than static approaches and less explicit documentation of what functions expect. The talk focuses on new Clojure destructuring features intended to make those expectations clearer without requiring closed, brittle schemas.
Destructuring and key requirements
The talk walks through map destructuring, including nested values and defaults. In existing destructuring, missing keys are generally optional: a missing binding becomes nil, or a default can be supplied with :or.
The new features add ways to express required keys and document keys that are relevant to a particular context:
- Required-key directives (
:keys!,:strs!, and:syms!) indicate that specified keys must be present. By default, a missing required key throws an exception. Required keys cannot also be given defaults through:or. - Explicit keys without bindings: Binding directives can list key names after
&. These keys can be checked or documented without creating local variables for them. - Missing-key handling: A
:missingdirective can collect absent required keys into a nested map-shaped result instead of throwing. This lets a program handle missing external or database data as normal control flow—for example, by logging, prompting a user, or trying another source. Bindings for absent required keys arenil.
Selection, forwarding, and programmable selectors
Hickey emphasizes that required keys should not mean “reject everything I didn’t name.” Flexible systems often need to process the information they understand while preserving and forwarding the rest.
The talk introduces directives for working with the structure implied by a destructuring form:
- Everything returns the input structure, with applicable defaults filled in.
- Select returns only the structure named by the destructuring form, also applying defaults.
- Excess returns input keys outside that selection. This makes it possible to transform known fields while passing unknown fields onward, rather than discarding or rejecting them.
- Selection and excess can be recombined. Hickey also mentions deep merging as a way to restore transformed selections together with excess data.
A selector macro takes a destructuring form and produces a function that applies the same selection-related logic to maps. This makes the functionality usable beyond local variable binding—for example, to normalize data, check for missing keys, or extract excess information.
Key takeaway
The features aim to provide context-specific documentation and enforcement while keeping data structures open to change. Hickey’s broader recommendation is to design for information flow: inspect and select what a component needs, preserve what it does not understand, and avoid treating unfamiliar data as automatically invalid.
Reviews, guides, and demonstrations
- Review: None; this is a technical keynote, not a product review.
- Guide/tutorial element: The talk includes a walkthrough of map destructuring and examples of the new directives and selector behavior.
Main speaker and source
- Rich Hickey — speaker and creator of Clojure.
- ClojureTV — video source; the talk is presented at Clojure/Conj.
Rate this summary
Your feedback will help improve summaries.
Improve this summary
Reprocess with a stronger model when the summary feels incomplete or inaccurate.
Translate summary in another language
Ask questions to this video
Chat for follow-up questions, clarifications, and source-backed answers.