ClojureScript Research Notes

Table of Contents

1. Overview

Research notes covering ClojureScript from the "Embracing JavaScript Tools" era (1.10.x) through the current 1.12.x async/await releases, and their implications for the Clojure Brain Teasers Review project.

2. Release Timeline

Version Date Theme / Notes File
1.12.145 2026-05-07 ^:async / await release-1.12.145.org
1.12.134      
1.12.116 2025-11-24 ES2016, Proxy, Lite Mode release-1.12.116.org
1.12.42      
1.11.132      
1.11.51      
1.10.914      
1.10.891      
1.10.866      
1.10.844   Embracing JavaScript Tools  

3. Brain Teaser Candidates

3.1. Async/Await (1.12.145)

Detailed analysis: async-brain-teasers.org – 9 candidates, 4 implemented.

Top picks:

  1. Serial vs parallel await in let (T1)
  2. await is not a function (T3)
  3. Async test that passes by accident (T4)
  4. binding lost across await (T5)

3.2. Proxy & Interop (1.12.116)

See release-1.12.116.org for candidates around:

  • Proxied map mutation transparency
  • refer-global shadowing
  • Lite mode type identity
  • Method values with variadic functions

4. Key Themes

4.1. JS Interop Friction Reduction

Each release reduces the gap: npm deps -> proxy -> refer-global -> async/await.

4.2. Compilation Target Evolution

ES3 (1999) -> ES2016 (2016) in 1.12.116. Unlocks Proxy, Reflect, async functions.

4.3. Async Model Differences

JVM Clojure: threads + STM + core.async. ClojureScript: single-threaded event loop + promises + ^:async/await. Same code patterns (binding, atoms, lazy seqs) have different failure modes.

5. Diagram Ideas

  • ClojureScript release timeline with key features per version
  • Async frame lifecycle: let desugaring creates sequential awaits
  • Promise.all vs serial await timing comparison
  • Dynamic binding stack vs async frame suspension
  • JS interop evolution across releases

Author: J Walsh

jwalsh@nexus

Last Updated: 2026-05-11 07:53:08

build: 2026-05-11 07:53 | sha: 125deff