文章摘要
ClojureScript 1.12.145版本发布,新增了对JavaScript异步函数的支持。通过在函数前添加^:async提示,编译器会将其转换为JavaScript的async函数,支持await语法。这一改进满足了用户调查中最期待的JavaScript互操作需求,减少了对额外依赖的需求。
文章总结
标题:ClojureScript 1.12.145 版本发布
发布日期:2026年5月7日
我们很高兴地宣布 ClojureScript 的新版本发布。现有用户请仔细阅读以下更新说明。
异步函数支持
随着 ClojureScript 开始支持 ECMAScript 2016 标准,我们能够谨慎地选择增强互操作性的新领域。从本版本开始,通过为函数添加 ^:async 提示标记,ClojureScript 编译器将生成 JavaScript 异步函数:
```clojure (refer-global :only '[Promise])
(defn ^:async foo [n] (let [x (await (Promise/resolve 10)) y (let [y (await (Promise/resolve 20))] (inc y)) ;; 非异步函数 f (fn [] 20)] (+ n x y (f)))) ```
该特性同样适用于测试场景:
clojure
(deftest ^:async defn-test
(try
(let [v (await (foo 10))]
(is (= 61 v)))
(let [v (await (apply foo [10]))]
(is (= 61 v)))
(catch :default _ (is false))))
在最近的 Clojure 社区调查中,异步函数支持高居 JavaScript 互操作性改进需求榜首。这一增强功能消除了与现代浏览器 API 和流行类库交互时对额外依赖的需求。
完整修复列表和功能变更请参阅更新日志。
致谢
特别感谢为 ClojureScript 1.12.145 做出贡献的社区成员: - Michiel Borkent
(注:原文中的技术细节和代码示例已完整保留,删减了重复的版本号说明和部分格式化标记,使内容更加紧凑易读。)
评论总结
总结评论内容:
- 对ClojureScript异步功能的历史认可
- 指出ClojureScript通过core.async库早已实现异步范式(CSP风格) "fun fact: clojurescript had support for asynchronous paradigm through core.async library" "Clojure already had a nicer pattern for this"
- 对发布的重要性和实用性评价
- 认为这是重要的JavaScript互操作改进,无需额外库 "This is important for JavaScript interop without having to include additional libraries" "Congratulations on the release :-)"
- 对ClojureScript采用度的讨论
- 表达希望前端替代方案能更普及的愿望 "I wish an alternative to JS for the front end would catch on" "Maybe this is easier to adopt if you're already a clojure shop"
- 对技术发展的观察
- 注意到Clojure/ClojureScript最近突然受到更多关注 "Surprised to see Clojure/ClojureScript come up on socials more often" "are we in for a sexp resurgence?"
- 其他技术比较
- 提到CoffeeScript早已支持async/await "But it already supports async/await :)" "I remember a decade ago when JavaScript got Async/Await"
- 对生态系统的建议
- 建议移除Google Closure Compiler依赖 "Now also get rid of the elephant in the room - 'Google Closure Compiler'"