Clojure core.async Evolution
summary
core.async currently implements go blocks → state machines by a Clojure macro that analyzes code and rewrites it into a pausable state machine so channel parking doesn’t consume OS threads; Java 21 virtual threads (Java 21) let the JVM block without wasting carriers so go blocks can instead run on virtual threads and the analyzer can be removed for a simpler JVM implementation while keeping the same API. new additions include an io-thread macro for blocking IO workloads and a flow namespace that composes processes as pure functions into a monitored directed graph using core.async channels.
AI-written summary · about
chapters (13)
- 0:00Introduction
- 1:07Clojure overview
- 4:24Concurrency foundations
- 7:17core.async origins
- 10:25Channels and operations
- 13:12Go blocks
- 18:16Virtual threads impact
- 22:32Workload strategies
- 25:40New Flow library
- 32:05Flow architecture
- 37:04Further reading
- 40:14Maintenance approach
- 43:06Q&A
related talks
40mEvolving Clojure with Virtual Threads
01h 04mcore.async: Concurrency without Callbacks
40mCore.Async
35mApplying the paradigms of core.async in ClojureScript
45mSimplifying Asynchronous Code With Scala Async
34mComparing the Actor model & CSP concurrency with Elixir & Clojure
28mAutomated Correctness Analysis for core.async
42mClojure Futures
