Clojure 1.13 新增了对检查键的支持
摘要
Clojure 1.13.0-alpha1 已发布,新增了用于映射解构的检查键,强制要求必需键并在缺失时抛出异常,以及其他改进。
暂无内容
查看缓存全文
缓存时间: 2026/07/06 17:05
# Clojure - Clojure 1.13.0-alpha1
来源:https://clojure.org/news/2026/07/02/clojure-1-13-alpha1
*2026年7月2日* *Alex Miller*
Clojure 1.13.0-alpha1 现已可用!请到 Downloads(https://clojure.org/releases/downloads)页面查找下载和使用信息。
## https://clojure.org/news/2026/07/02/clojure-1-13-alpha1#_checked_keys检查键
现在,您可以通过使用 `:keys` / `:syms` / `:strs` 指令的新检查变体——`:keys!` / `:syms!` / `:strs!`,来确保在映射解构时所需的键已绑定,若键不存在则会抛出异常。此外,在所有指令中,您还可以在 `&` 之后指定不会被绑定的键,用于文档记录或检查目的。
- CLJ-2961 (https://clojure.atlassian.net/browse/CLJ-2961) 检查键
- CLJ-2960 (https://clojure.atlassian.net/browse/CLJ-2960) 检查键的规范
- CLJ-2949 (https://clojure.atlassian.net/browse/CLJ-2949) `req!` – `get` 的变体,在找不到键时报告错误
- CLJ-2954 (https://clojure.atlassian.net/browse/CLJ-2954) let/loop/let* – 禁止将 `&` 作为局部绑定
## https://clojure.org/news/2026/07/02/clojure-1-13-alpha1#_other_changes_since_clojure_1_12_5自 Clojure 1.12.5 以来的其他更改
- 仅包含关键字键的 PersistentArrayMap 现在在转换为 PersistentHashMap 之前,其增长上限为 64 个元素(之前为 8 个)。在此范围内,PAM 的身份扫描比 PHM 查找效率更高,同时也使更多调用点变为单态,从而更容易优化。
- CLJ-2891 (https://clojure.atlassian.net/browse/CLJ-2891) 移除了静态初始化常量上的 ACC_FINAL 标记。此更改是为了将 Java 字节码基线迁移以应对新的验证器检查而做的准备工作。
- 运行时和测试依赖项已更新至最新版本。
## https://clojure.org/news/2026/07/02/clojure-1-13-alpha1#_try_it_out试用
更新您的 deps.edn 中的 :deps:
```
org.clojure/clojure {:mvn/version "1.13.0-alpha1"}
```
使用 Clojure CLI(任意版本)启动 REPL:
```
clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version "1.13.0-alpha1"}}}
```
相似文章
Elixir v1.20 发布:现为渐进类型语言
Elixir v1.20 引入了基于集合论的渐进类型,能够实现类型推断和可验证的缺陷检测,而无需开发者添加注释,这标志着该语言演进的重大里程碑。
ClojureScript 迎来 Async/Await
ClojureScript 1.12.145 通过 ^:async 提示引入原生异步函数支持,实现与 JavaScript async/await 的直接互操作,无需额外依赖。
卫兵!卫兵
探讨 Elixir 中一个令人惊讶的行为:`is_map_key/2` 守卫可能导致守卫失败而非返回 false,从而破坏了布尔运算符的可交换性。
依赖类型的 Clojure 领域特定语言,带有与 Lean4 兼容的内核
Ansatz 是一个 Clojure 库,实现了 Lean 4 的归纳构造演算内核,使 Clojure 程序员能够编写依赖类型的、经过验证的代码,这些代码的证明与 Mathlib 兼容,并能编译为 JVM 字节码。
jank 现已拥有自己的自定义 IR
jank 是一种 Clojure 方言,现已引入一种在 Clojure 语义层面设计的自定义中间表示,以实现更好的优化并与 JVM 竞争。