ClojureScript 迎来 Async/Await
摘要
ClojureScript 1.12.145 通过 ^:async 提示引入原生异步函数支持,实现与 JavaScript async/await 的直接互操作,无需额外依赖。
暂无内容
查看缓存全文
缓存时间: 2026/05/08 10:41
# ClojureScript - 1.12.145 版本发布
来源:https://clojurescript.org/news/2026-05-07-release
*2026年5月7日* *ClojureScript团队*
我们很高兴地宣布 ClojureScript 的新版本发布。如果您是 ClojureScript 的现有用户,请仔细阅读以下发布说明。
## https://clojurescript.org/news/2026-05-07-release#_async_functions 异步函数
既然 ClojureScript 现在面向 ECMAScript 2016(https://clojurescript.org/news/2025-11-24),我们可以谨慎地选择新的互操作增强方向。从这一版本开始,为函数添加 `^:async` 提示将使 ClojureScript 编译器生成 JavaScript 异步函数(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function):
``
(refer-global :only '[Promise])
(defn ^:async foo [n]
(let [x (await (Promise/resolve 10))
y (let [y (await (Promise/resolve 20))]
(inc y))
;; not async
f (fn [] 20)]
(+ n x y (f))))
``
这也适用于测试:
``
(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 互操作方面最受 ClojureScript 社区期待。这一增强消除了在与现代浏览器 API 和流行库进行常见交互时引入额外依赖的必要性。
完整的修复、更改和增强列表请参见此处(https://github.com/clojure/clojurescript/blob/master/changes.md#1.12.145)
## https://clojurescript.org/news/2026-05-07-release#_contributors 贡献者
感谢所有为 ClojureScript 1.12.145 做出贡献的社区成员:
- Michiel Borkent
相似文章
Lua-async
Lua-async 是一个为 Lua 语言增加异步编程功能的新库,在一个技术新闻平台上共享。
Async/Await 的设计空间探索
本文介绍了编程语言中直线异步性的设计空间探索,审视了不同语言中async/await实现的差异及其语义后果。
Clojure 速度几乎媲美 C(需借助一些优化)
本文详细介绍了 Clojure 如何借助 JVM 的 Vector API 和精心优化,在 3D 压力测试中达到接近 C 的帧率(仅差 20%),展示了动态语言在热循环中也能接近底层性能。
@rauchg:Safari 27 支持 JSPI,这是一个神奇的 WebAssembly 能力,用于同步原生代码以在异步 Promise 上挂起。在 …
Safari 27 引入了 JSPI,这是一种 WebAssembly 能力,用于将原生代码与异步 Promise 同步,并重点介绍了 fx,这是一个开源编码代理工具,可以通过 WebAssembly 在浏览器中运行。
proposal-async-context: 用于 JavaScript 的异步上下文
关于 JavaScript 中 Async Context API 的提案,用于在异步代码(如 promise 延续或 async 回调)中隐式传播值。