Clojure
开发变更日志

开发变更日志

官方的 变更日志 记录了主要稳定版本之间的差异。此页面收集了开发期间的临时开发版本公告。

开发版本命名指南

  • Alpha - 开发中的新功能和增强功能

  • Beta - 仅修复 bug,预计不会有新的功能开发

  • RC - 发布候选版本,除非发现严重问题,否则将发布为最终版本

注意:所有开发版本都可能包含自上一个版本以来新工作带来的重大变更。

1.12.0 版本

1.12.0-alpha9 (2024年3月8日)

修复 CVE CVE-2024-22871,详细内容见 GHSA-vr64-r9qj-h27f

  • CLJ-2839 - iteratecyclerepeat - 无限序列具有无限的 hashCode()

1.12.0-alpha8 (2024年2月21日)

增强功能

  • CLJ-2568 - clojure.walk/walk - 在列表和序列上保留元数据

  • CLJ-2783 - 替换对已弃用的 URL 构造函数的调用

回退

  • CLJ-1162 - deref - 在非 IDRef 上调用时改进错误消息

1.12.0-alpha7 (2024年2月8日)

回退

  • CLJ-2783 - 替换对已弃用的 URL 构造函数的调用

1.12.0-alpha6 (2024年2月8日)

功能

增强功能

  • CLJ-2777 - clojure.java.process/start - 添加 :clear-env 选项以清除父环境中的环境变量

  • CLJ-2828 - clojure.java.process/capture - 已移除,请改用 slurp

  • CLJ-1162 - deref - 在非 IDRef 上调用时改进错误消息

  • CLJ-2225 - assertassert - 改进文档字符串以添加上下文

  • CLJ-2290 - into - 在文档字符串中添加 0 元和 1 元

  • CLJ-2552 - reify - 改进文档字符串并修复示例

  • CLJ-2640 - ex-info - 现在处理 nil 数据映射

  • CLJ-2783 - 替换对已弃用的 URL 构造函数的调用

错误修复

  • CLJ-2788 - clojure.repl.deps/add-lib - 不再受 *print-length* 设置的影响

  • CLJ-2813 - 匿名函数参数读取器 - 不再接受无效的参数符号

  • CLJ-2803 - #inst 打印器 - 不再使用 ThreadLocal 格式化程序

1.12.0-alpha5 (2023年10月20日)

  • CLJ-2804 lazy-seq、delay - 为了避免在同步块下运行用户代码,用 ReentrantLock 替换 synchronized

1.12.0-alpha4 (2023年6月28日)

错误修复

  • CLJ-2686 clojure.core.server/parse-props - 如果在初始化期间系统属性并发修改,则修复异常

  • CLJ-2694 修复使用 Long/MIN_VALUE 时违反的比率不变式

先前 1.12.0 alpha 版本中的修复

  • CLJ-2772 drop、nthrest、nthnext - 修复 n != 正整数时的行为回归

  • CLJ-2741 drop - 修复 StringSeq 错误保留的元数据

  • CLJ-2767 add-libs - 修复 repl 检查始终允许使用的错误

  • CLJ-2769 add-libs - 通过使用 stdin 修复行限制问题

  • CLJ-2773 c.j.process/[from,to]-file - 修复参数和文档字符串中的不匹配

  • CLJ-2776 c.j.process/exec - 修复 redirectErrorStream 的不正确使用

  • CLJ-2774 c.j.process/exec - 修复选项的合并顺序以允许覆盖

  • CLJ-2778 c.j.process/capture - 修复文档字符串中的拼写错误

  • CLJ-2779 c.j.process/start - 删除默认值覆盖的验证检查

1.12.0-alpha3 (2023年4月19日)

  • CLJ-2521 从 alpha2 中回退此修复,因为它似乎改变了另一个错误 (CLJ-2743) 的出现位置,将一起重新审视这些问题

1.12.0-alpha2 (2023年4月12日)

新增

1.12.0-alpha1 工作中的修复

  • CLJ-2742 range - 回退到像 IDrop 更改之前一样使用分块

  • CLJ-2740 PersistentVector seq drop - 删除不必要的调用

  • CLJ-2715 partitionv - 修复最后一个填充分区的错误

  • CLJ-2718 repeat - 修复 drop 中到达或超过序列末端的错误

错误修复和增强功能

  • CLJ-2521 编译器 - 修复嵌套 try/loop/try 时无效的类

  • CLJ-2739 ArityException - 修复函数错误地调用超过 20 个参数时的消息

  • CLJ-2726 #uuid 数据读取器 - 修复无效输入时的异常,以便它流经读取器

  • CLJ-2709 range - 对 int 参数使用优化的范围

  • CLJ-2721 range - 修复向非优化范围添加元数据时无效的参数顺序

  • CLJ-2683 with-open - 修复在展开时不限定 .close 方法的问题

  • CLJ-2724 clojure.java.io/do-copy - 修复不正确的类型提示

1.12.0-alpha1 (2022年6月30日)

新增

  • CLJ-2713 持久或算法集合的有效 drop 和 partition

  • CLJ-1327 将 Clojure 类型的 serialVersionUID 固定到 1.10.3 值

  • CLJ-2711 实现命名空间内部策略,以便自己的命名空间中的内部变量不能被 refer 或 intern 替换

  • CLJ-2712 回退 CLJ-1604 修复 AOT 错误,该错误阻止覆盖 clojure.core 函数

增强功能

  • CLJ-1872empty? 扩展到非可序列化的 counted? 集合,例如瞬态集合

1.11.2 版本

1.11.2 (2024年3月8日)

修复 CVE CVE-2024-22871,详细内容见 GHSA-vr64-r9qj-h27f

  • CLJ-2839 - iteratecyclerepeat - 无限序列具有无限的 hashCode()

1.11.1 版本

1.11.1-rc1 (2022年4月1日)

  • CLJ-2701 将 Keyword 和 ArraySeq 的 serialVersionUID 固定回 1.10.3 值以保留二进制序列化

1.11.0 版本

1.11.0-rc1 (2022年2月16日)

  • CLJ-2697 添加 1.11 变更日志

  • CLJ-2695 为 parse-double 添加更多测试

1.11.0-beta1 (2022年2月2日)

  • CLJ-2690 改进 iteration 文档字符串和参数名称

  • CLJ-2689 修复 clojure.math 测试以更容忍浮点数比较

  • CLJ-2685 修复 iteration 生成测试失败

  • CLJ-2529 修复通过 Compiler.load() 调用时将运行时错误错误地报告为编译器错误的问题

  • CLJ-2620 修复 prepl 中 :exception `:val` 的非对称处理

  • CLJ-1180 修复 defprotocol 中类类型提示的解析

  • CLJ-1973 使生成的类中发出的协议方法的顺序可重现

  • 回退 CLJ-2493 的先前更改

  • CLJ-2493 clojure.java.browse - 修复 browse-url 在调用 xdg-open 时挂起的问题(新的更改更有针对性,并解决了更多情况)

1.11.0-alpha4 (2022年1月13日)

  • CLJ-2673 添加 abs,并更新 minmax 以在可能的情况下使用 Math 实现

  • CLJ-2555 添加 iteration 生成器函数

  • CLJ-2621 修复实例方法表达式在语句上下文中对未使用的返回值进行不必要的装箱

  • CLJ-2663 修复向量 = 在使用无限序列调用时不终止的问题

  • CLJ-2679 修复 case 表达式中符号的哈希冲突

  • CLJ-2670 使用 Math.exact…​ 方法对已检查的长数学运算进行性能优化

  • CLJ-2680 修复使用匹配类型提示对基本局部变量进行类型提示不会出错的问题

  • CLJ-2234 修复仅使用全局层次结构的多方法首选项

  • CLJ-2556 修复 into 完成,以便 halt-when 可以工作

  • CLJ-2665 修复带有 :as 和 :as-alias 的 require 以加载

  • CLJ-2677 clojure.math - 修复主体和内联中的方法反射,修复文档字符串,重命名

  • CLJ-1379 clojure.test - 修复 :pass 映射中 :actual 形式的引用

  • CLJ-2493 clojure.java.browse - 修复 browse-url 在调用 xdg-open 时挂起的问题

  • CLJ-2611 clojure.xml - 默认情况下停止处理 XXE 展开

  • CLJ-2684 将 contrib 依赖项更新到最新版本(spec.alpha、test.check、test.generative)

1.11.0-alpha3 (2021年11月23日)

  • CLJ-2667 添加函数以从字符串解析单个 long/double/uuid/boolean

  • CLJ-2668 添加 NaN? 和 infinite? 谓词

  • CLJ-1925 添加 random-uuid

  • CLJ-2664 添加 clojure.java.math 命名空间,java.lang.Math 的包装器

  • CLJ-2666 使 Clojure Java API 的 javadoc 文本与示例匹配

  • CLJ-1360 更新 clojure.string/split 的 docstring,涉及尾随空部分

  • CLJ-2249 澄清 clojure.core/get 的 docstring,涉及集合、字符串、数组、ILookup

  • CLJ-2488 为 reify docstring 添加定义

  • CLJ-1808 map-invert 应使用 reduce-kv 和 transient

  • CLJ-2065 在 SubVector 上支持 IKVReduce

  • 将依赖项更新到 spec.alpha (0.3.214)

1.11.0-alpha2 (2021年9月14日)

  • CLJ-2123 添加 :as-alias 选项到 require 中,类似于 :as 但不加载

  • CLJ-1959 添加 update-keys 的实现

  • CLJ-2651 添加 update-vals 的实现

  • CLJ-1908 添加 clojure.test api run-test 和 run-test-var 以使用夹具运行单个测试并报告

  • CLJ-1879 IKVReduce - 使旧的慢路径 (IPersistentMap) 更快,并扩展到 Object,将其与任何完全可枚举的类型集分离

  • CLJ-2600 不要阻塞 delay 的 realized?在挂起的結果上

  • CLJ-2649 修复一些-fn 和 every-pred 中检查的顺序,以便在 3 个谓词情况下与其他展开匹配

  • CLJ-2636 在定义 *clojure-version* 时去除对 java.util.Properties 的反射

  • CLJ-2350 改善关键字元数异常消息

  • CLJ-2444 修复 test-vars docstring 中的错别字

  • CLJ-1509 AOT 编译更多 Clojure 命名空间

  • CLJ-2387 修复套接字服务器端口验证中的越界错误

  • 将依赖项更新到 core.specs.alpha (0.2.62)

1.11.0-alpha1 (2021年3月18日)

1.10.3 版

1.10.3-rc1 (2021年2月16日)

  • CLJ-2564 恢复之前的错误消息更改

  • CLJ-2453 允许在 prepl 中使用读取器条件

1.10.2 版

1.10.2-rc3 (2021年1月15日)

  • CLJ-2602 使打印测试更改与平台无关

1.10.2-rc2 (2021年1月6日)

  • CLJ-2597 代理应发出 Java 1.8 字节码

  • CLJ-2599 将 spec.alpha 依赖项提升到 0.2.194,并将 core.specs.alpha 依赖项提升到 0.2.56

1.10.2-rc1 (2020年12月11日)

  • CLJ-1005 在 zipmap 中使用 transient 映射

  • CLJ-2585 正则表达式匹配器上的 nth 具有 not-found 返回在最后一个组索引上的 not-found

  • CLJ-1445*print-meta* 为 true 时,pprint 不会打印集合元数据

  • CLJ-2495 prepl docstring 不正确

  • CLJ-2169 conj 的 :arglists 已过时

  • CLJ-2459 如果 jar 使用 java -jar 执行,则会出现 ExceptionInInitializerError

1.10.2-alpha4 (2020年11月5日)

  • CLJ-2587 修复 CLJ-1364 中 gvec 的反射警告

1.10.2-alpha3 (2020年11月2日)

  • CLJ-2492 删除对已弃用的 Class.newInstance() 的使用

  • CLJ-2534 修复 JDK 11+ 的 javadoc url

  • CLJ-1364 vector-of 未实现 equals 或哈希方法

  • CLJ-2549 vector-of 未为元数据实现 IObj

  • CLJ-1187 空文字集合上的带引号的元数据丢失了

1.10.2-alpha2 (2020年9月25日)

  • CLJ-2571 将 Throwable 返回类型提示添加到 ex-cause

  • CLJ-2572 避免在 clojure.data 中使用反射

  • CLJ-2295 消除特殊表单的重复 doc string 打印

  • CLJ-2564 改进 case 的错误消息

  • CLJ-2580 修复导致编译错误的 case 表达式分支分析

  • CLJ-2469 修复使用命名空间语法打印某些映射时的错误

1.10.2-alpha1 (2020年3月5日)

  • CLJ-1472 确保监视器对象位于堆栈上,用于验证器

  • CLJ-2502 修复 clojure.stacktrace/print-stack-trace 中的反射警告

  • CLJ-2517 进一步修复使用基本类型参数调用静态接口方法的问题

1.10.1 版

1.10.1-RC1 (2019年5月21日)

  • 更新了 1.10.1 的更改日志

1.10.1-beta3 (2019年5月16日)

  • CLJ-2504 为 clojure.main 中的错误报告提供更多选项

1.10.1-beta2 (2019年4月11日)

  • CLJ-2497 将错误报告位置放在其自己的行上

  • CLJ-2499 一些编译器 expr evals 报告为错误阶段

1.10.1-beta1 (2019年3月21日)

  • CLJ-2484 将 user.clj 初始化移出 RT<clinit>

  • CLJ-2463 clojure.main 未捕获异常处理

  • CLJ-2491 使脆弱的测试在 Java 12 下工作,并减少脆弱性

1.10 版

1.10.0-RC5 (2018年12月11日)

  • CLJ-2454 - 修复从调用匹配的反射调用引发的 IllegalAccessException

1.10.0-RC4 (2018年12月7日)

  • CLJ-2449 - 将 serialized-require 设置为私有

1.10.0-RC3 (2018年12月3日)

  • CLJ-2447 - clojure.datafy docstring 丢失

  • CLJ-2448 - 将 async-require 的名称更改为 serialized-require

1.10.0-RC2 (2018年11月26日)

除了更改日志更新之外,没有其他更改。

1.10.0-beta8 (2018年11月21日)

  • CLJ-2438 - 在执行错误消息中反混淆源位置

  • CLJ-2437 - 添加 async-require 并将其从 requiring-resolve 中使用

  • CLJ-2436 - 修复 reflect.java 中的反射警告

1.10.0-beta7 (2018年11月19日)

  • CLJ-2435 - 在编译和宏扩展错误中包含根原因类名

1.10.0-beta6 (2018年11月16日)

1.10.0-beta6 中的更改

  • 1.10.0-beta5 中添加的元数据协议扩展现在在定义协议时需要选择加入,使用 :extend-via-metadata。

  • clojure.reflect 下的 JavaReflector 已数据化

  • CLJ-2432 - 添加了 clojure.core/requiring-resolve,它类似于 resolve,但如果需要,会 require 符号的命名空间。

  • CLJ-2427 - 修复 CompilerException.toString() 中的错误,该错误可能导致在创建异常字符串时抛出第二个异常,从而掩盖原始异常。

  • CLJ-2430 - 更多关于错误阶段、ex-triage 的工作,并允许 prepl 更好地使用新的错误报告基础设施

1.10.0-beta5 (2018年11月6日)

1.10.0-beta5 中的更改

  • 除了之前的扩展方法之外,值现在可以通过添加元数据来扩展协议,其中键是命名协议函数的完全限定符号,值是函数实现。协议实现首先检查直接定义(defrecord、deftype、reify),然后检查元数据定义,然后检查外部扩展(extend、extend-type、extend-protocol)。datafy 已更新以使用此机制。

  • symbol 现在可以传递变量或关键字以获取相应的符号

  • CLJ-2420 - 错误报告增强 - 更精细的阶段报告,新的 clojure.main/ex-triage 从 clojure.main/ex-str 中分离出来,执行错误现在报告堆栈跟踪中顶部的 **用户** 行,省略核心中的帧,增强了通过表单上的元数据提供文件和行的方法

  • CLJ-2425 添加 java 11 javadoc url

  • CLJ-2424 修复来自 CLJ-2417 的测试错误

1.10.0-beta4 (2018年10月22日)

1.10.0-beta4 包含自 1.10.0-beta3 以来进行的以下更改

  • CLJ-2417 sort 和 sort-by 应保留元数据

1.10.0-beta3 (2018年10月12日)

1.10.0-beta3 包含自 1.10.0-RC1 以来进行的以下更改

  • datafy - 将 :name 添加到数据化类和命名空间,将 :class 添加到所有数据化的元数据中

  • CLJ-1079 - 读取器应保留而不是覆盖列表和序列上的 :line :column 元数据。还要使 clojure.main 基于 :file 元数据绑定 *file*。

1.10.0-RC1 (2018年10月11日)

1.10.0-RC1 与 1.10.0-beta2 的代码相同(只是更改日志更新很小)。

1.10.0-beta2 (2018年10月9日)

1.10.0-beta2 包含自 1.10.0-beta1 以来进行的以下更改

  • CLJ-2414 - 反射查找默认方法的回归

  • CLJ-2415 - 错误原因应始终位于错误消息的第二行

  • 添加了 clojure.datafy

    • clojure.datafy 是对象到数据转换的工具。datafynav 函数可用于转换和(延迟)遍历对象图。数据转换过程可以通过使用协议或元数据的使用者来影响。datafy 处于 alpha 阶段,可能会发生变化。

1.10.0-beta1 (2018年10月5日)

1.10.0-beta1 包含自 1.10.0-alpha9 以来进行的以下更改

  • 恢复 CLJ-1550 的更改 - 由 deftype 和 defrecord 生成的类与 .getPackage 不兼容

  • 恢复 CLJ-1435 的更改 - 'numerator 和 'denominator 无法处理整数值(即 N/1)

  • 添加自 1.9 以来发布的更改日志

  • 将 prepl 标记为 alpha

1.10.0-alpha9 (2018年10月4日)

1.10.0-alpha9 包含自 1.10.0-alpha8 以来进行的以下更改

  • CLJ-2374 - 添加类型提示以解决 JDK 11 中的反射歧义

  • CLJ-1209 - 在 clojure.test 错误报告中打印 ex-data

  • CLJ-1120 - 添加 ex-cause 和 ex-message,如 CLJS 中一样,用于可移植错误处理

  • CLJ-2385 - 延迟 tap-loop 线程的启动(解决 graal native-image 问题)

  • CLJ-2407 - 修复单元测试中的错误

  • CLJ-2066 - 为 Java 9+ 中的 --illegal-access 警告添加反射回退

  • CLJ-2375 - 修复已弃用的 JDK api 的用法

  • CLJ-2358 - 修复 read+string 的无效元数

1.10.0-alpha8 (2018年9月14日)

1.10.0-alpha8 包含自 1.10.0-alpha7 以来进行的以下更改

  • CLJ-2297 - 当使用 without 删除键时,PersistentHashMap 会泄漏内存

  • CLJ-1587 - PersistentArrayMap 的 assoc 不会尊重 HASHTABLE_THRESHOLD

  • CLJ-2050 - 移除 HashCollisionNode 中冗余的键比较

  • CLJ-2349 - 在 clojure.test 中报告未捕获的 ExceptionInfo 的正确行号

  • CLJ-1403 - ns-resolve 可能会抛出 ClassNotFoundException,但应该返回 nil

  • CLJ-1654 - 在 some 中重用 seq

  • CLJ-1764 - 当访问无限分区的一个元素时,partition-by 运行无限循环

  • CLJ-2044 - 为 clojure.instant 中的函数添加 arglist 元数据

  • CLJ-1797 - require 失败时,在错误中提及 cljc

  • CLJ-1832 - unchecked-* 函数在基本类型 long 和包装类型 Long 上具有不同的行为

  • CLJ-1366 - 空映射字面量每次读取都作为不同的映射

  • CLJ-1550 - 由 deftype 和 defrecord 生成的类与 .getPackage 不兼容

  • CLJ-2031 - clojure.walk/postwalk 不保留 MapEntry 类型对象

  • CLJ-1435 - 'numerator 和 'denominator 无法处理整数 (例如 N/1)

  • CLJ-2257 - 文档字符串:修复 proxy 中的错别字

  • CLJ-2332 - 文档字符串:修复 remove-tap 中的重复内容

  • CLJ-2122 - 文档字符串:将 flatten 的结果描述为惰性

1.10.0-alpha7 (2018年9月5日)

Clojure 1.10.0-alpha7 现已可用。

1.10.0-alpha7 包含自 1.10.0-alpha6 以来以下更改

  • 将依赖项更新到最新的 spec.alpha (0.2.176) 和 core.specs.alpha (0.2.44)

  • CLJ-2373 - 对 REPL 上异常消息的打印进行分类和改进

  • CLJ-1279 - 为宏内部的函数元数错误报告正确的元数计数

  • CLJ-2386 - 省略 ex-info 构造的堆栈帧

  • CLJ-2394 - 在 pst 中警告,语法错误的堆栈跟踪在执行前失败

  • CLJ-2396 - 如果使用默认的解释打印机,则在打印 spec 函数错误时省略 :in 子句

1.10.0-alpha6 (2018年7月4日)

Clojure 1.10.0-alpha6 现已可用。

1.10.0-alpha6 包含自 1.10.0-alpha5 以来以下更改

  • CLJ-2367 - 集成 ASM 回归的修复并添加案例测试 - 感谢 Sean Corfield 提供的补丁以及 Daniel Sutton 和 Ghadi Shayban 在跟踪问题时的帮助。

1.10.0-alpha5 (2018年6月27日)

Clojure 1.10.0-alpha5 现已可用。

1.10.0-alpha5 包含自 1.10.0-alpha4 以来以下更改

  • CLJ-2363 - 将 Java 8 设为 Clojure 的最低要求 (还将嵌入式 ASM 升级到最新版本) - 感谢 Ghadi Shayban!

  • CLJ-2284 - 修复在 Java 9+ 中对静态接口方法调用的无效字节码生成 - 感谢 Ghadi Shayban!

  • CLJ-2330 - 修复由于序列化漂移而在 Java 10 构建上失败的脆弱测试

  • CLJ-2362 - withMeta() 应该在新的元数据与先前元数据相同的情况下返回标识

  • CLJ-1130 - 无法匹配静态方法时,改进错误消息

  • CLJ-2089 - 使用默认比较器的排序集合不检查第一个元素是否为 Comparable

  • CLJ-2163 - 添加 var 序列化的测试

  • 将 spec.alpha 的依赖项版本升级到最新版本 0.2.168 (请参阅 更改)

  • 将 core.specs.alpha 的依赖项版本升级到最新版本 0.2.36 (请参阅 更改)

1.10.0-alpha5 放弃了对 Java 6 和 7 的支持,并将 Java 8 设为最低要求。编译将生成 Java 8 级别的字节码 (这将无法在早期版本的 Java 上运行)。这是自 Clojure 1.6 以来字节码版本的第一次更改。如果您尝试使用此版本测试您的库或项目并提供有关错误、性能差异 (好或坏)、兼容性等的反馈,我们将不胜感激。

当使用 clj 工具和 deps.edn 时,我们建议将别名添加到您的 ~/.clojure/deps.edn

{:aliases
 {:clj/next
  {:override-deps
   {org.clojure/clojure {:mvn/version "1.10.0-alpha5"}}}}}

然后,您可以通过使用 clj 激活别名来使用最新的 Clojure 开发版本运行任何项目

clj -A:clj/next

1.10.0-alpha4 (2018年2月9日)

  • 修复 read+string 的 0 元数错误

1.10.0-alpha3 (2018年2月8日)

  • prepl - 程序化 REPL

1.10.0-alpha2 (2018年1月19日)

  • CLJ-2313 - 字符串捕获模式的修复

1.10.0-alpha1 (2018年1月18日)

  • 将字符串捕获模式添加到 LineNumberingPushbackReader

1.9 版本

1.9.0-RC2 (2017年11月27日)

  • 构建中有一个新的 Maven 配置文件和 Ant 目标,用于构建包含依赖项 (以及 test.check) 的可执行 Clojure jar。这对于开发 Clojure 本身或仅克隆存储库并进行快速构建以获得可运行内容很有用。

  • readme.txt 已更新,其中包含有关如何创建和运行本地 jar 的信息。

  • 停止发布 clojure-VERSION.zip 文件作为发布的一部分。

1.9.0-RC1 (2017年11月7日)

  • 与 1.9.0-beta4 相同

1.9.0-beta4 (2017年10月31日)

  • CLJ-2259 - 删除 1.9 中添加的不必要的 bigdec? 谓词

  • 将 spec.alpha 依赖项升级到 0.1.143

1.9.0-beta3 (2017年10月25日)

  • CLJ-2254 - 添加系统属性 clojure.spec.skip-macros (默认值=false),可用于关闭宏中的 spec 检查

1.9.0-beta2 (2017年10月6日)

1.9.0-beta2 包含自 1.9.0-beta1 以来以下更改

  • CLJ-700 - (修复) contains?getfind 对瞬态集合失效

  • CLJ-2247 - (回归) 恢复并记录 {min,max}-key 的最后匹配语义

  • CLJ-2239 - (回归) 修复 Guava javadoc 位置

  • 将依赖项更新到 spec.alpha 0.1.134 - 请参阅 更改

1.9.0-beta1 (2017年9月18日)

1.9.0-beta1 包含自 1.9.0-alpha20 以来以下更改

  • CLJ-2077 - Clojure 无法从 java 9 下的引导类路径加载

1.9.0-alpha20 (2017年9月7日)

1.9.0-alpha20 包含自 1.9.0-alpha19 以来以下更改

  • CLJ-1074 - (新增) 添加新的 ## 阅读器宏以用于符号值,以及对双精度值 ##Inf、##-Inf、##NaN 的读取/打印支持

  • CLJ-1454 - (新增) 添加 swap-vals! 和 reset-vals!,它们都返回旧值和新值

  • CLJ-2184 - (错误) 在 doto 形式中传播元数据以改进错误报告

  • CLJ-2210 - (性能) 在编译器中缓存类推导以提高编译器性能

  • CLJ-2070 - (性能) clojure.core/delay - 提高性能

  • CLJ-1917 - (性能) 减少字符串上的 seq 应该在循环之外调用 String/length

  • CLJ-1901 - (性能) amap - 应该只调用一次 alength

  • CLJ-99 - (性能) min-key 和 max-key - 对每个参数最多评估一次 k

  • CLJ-2188 - (性能) slurp - 将返回类型标记为 String

  • CLJ-2108 - (启动时间) 延迟加载 spec 和核心规范 (这方面还有更多工作要做)

  • CLJ-2204 - (安全性) 禁用代理类的序列化,以避免反序列化时出现潜在问题

  • CLJ-2048 - (修复) 指定类型以避免 JVM 省略堆栈跟踪时出现 ClassCastException

  • CLJ-1887 - (修复) IPersistentVector.length() - 实现缺失的方法

  • CLJ-1841 - (修复) bean - 迭代器已损坏

  • CLJ-1714 - (修复) 在类型提示中使用类不应加载类

  • CLJ-1398 - (修复) clojure.java.javadoc/javadoc - 更新文档网址

  • CLJ-1371 - (修复) Numbers.divide(Object, Object) - 添加对 NaN 的检查

  • CLJ-1358 - (修复) doc - 未正确展开特殊情况 (try、catch)

  • CLJ-1705 - (修复) vector-of - 如果给出无法识别的类型,则修复 NullPointerException

  • CLJ-2170 - (文档) 修复位置不正确的文档字符串

  • CLJ-2156 - (文档) clojure.java.io/copy - 文档 char[] 支持

  • CLJ-2051 - (文档) clojure.instant/validated 文档字符串 - 修复错别字

  • CLJ-2104 - (文档) clojure.pprint 文档字符串 - 修复错别字

  • CLJ-2028 - (文档) filter、filterv、remove、take-while - 修复文档字符串

  • CLJ-1873 - (文档) require、*data-readers* - 将 .cljc 文件添加到文档字符串

  • CLJ-1159 - (文档) clojure.java.io/delete-file - 改进文档字符串

  • CLJ-2039 - (文档) deftype - 修复文档字符串中的错别字

  • CLJ-1918 - (文档) await - 改进有关 shutdown-agents 的文档字符串

  • CLJ-1837 - (文档) index-of、last-index-of - 阐明文档字符串

  • CLJ-1826 - (文档) drop-last - 修复文档字符串

  • CLJ-1859 - (文档) zero?、pos?、neg? - 修复文档字符串

1.9.0-alpha19 (2017年8月24日)

  • 使默认导入集在 RT 中公开

1.9.0-alpha18 (2017年8月23日)

  • 现在可以将 *reader-resolver* 绑定到 LispReader$Resolver 的实现,以控制读取器在解析自动解析的关键字和映射时对命名空间交互的使用。

  • 加强自动解析的关键字和自动解析的命名空间映射语法,以仅支持别名,如最初预期的那样

  • 更新为使用 core.specs.alpha 0.1.24

1.9.0-alpha17 (2017年5月26日)

  • CLJ-1793 - 在尾位置调用之前清除 'this'

  • CLJ-2091 clojure.lang.APersistentVector#hashCode 不是线程安全的

  • CLJ-1860 使 -0.0 的哈希值与 0.0 一致

  • CLJ-2141 仅从限定谓词返回 true/false

  • CLJ-2142 修复使用命名空间映射语法检查重复键

  • CLJ-2128 在宏展开期间的spec错误不再抛出带有位置的编译器异常

  • 更新为使用spec.alpha 0.1.123

1.9.0-alpha16 (2017年4月27日)

1.9.0-alpha16包含自1.9.0-alpha15以来的以下更改

  • 命名空间clojure.spec、clojure.spec.gen、clojure.spec.test已移动到外部库spec.alpha,Clojure通过依赖项包含该库

  • 这些命名空间已更改,现在附加了“.alpha”:clojure.spec.alpha、clojure.spec.gen.alpha、clojure.spec.test.alpha

  • clojure.spec中的所有关键字常量(如:clojure.spec/invalid)遵循相同的命名空间更改(现在为:clojure.spec.alpha/invalid)

  • 与断言相关的spec相关系统属性没有更改

  • 命名空间clojure.core.specs中clojure.core本身的规范已移动到外部库core.specs.alpha,Clojure现在依赖于该库

  • clojure.core.specs命名空间已更改为clojure.core.specs.alpha。该命名空间中所有限定的规范名称都遵循相同的命名空间更改(大多数人没有直接使用这些名称)

在大多数情况下,您可以通过以下方式更新您对Clojure 1.9.0-alphaX的使用到Clojure 1.9.0-alpha16:

  1. 将您的Clojure依赖项更新为[org.clojure/clojure "1.9.0-alpha16"] - 这将自动引入2个额外的下游库

  2. 更改声明或使用规范的命名空间中的命名空间声明为

(:require [clojure.spec.alpha :as s]
          [clojure.spec.gen.alpha :as gen]
          [clojure.spec.test.alpha :as stest])

1.9/spec拆分 (2017年4月26日)

我们将spec从Clojure存储库/工件中移出并放入库中,以便更容易地独立于Clojure发展spec。虽然我们认为spec是Clojure 1.9的重要组成部分,但在其最终确定之前,仍有一些设计问题需要解决。这使我们能够转向依赖于spec的alpha版本的生产Clojure版本(1.9)。用户还可以根据需要获取spec alpha库的更新版本。此外,这是增强对利用Clojure中依赖项的支持的第一步。

我们将创建两个新的contrib库,其中将包含以下(已重命名)命名空间

org.clojure/spec.alpha
    clojure.spec.alpha          (previously clojure.spec)
    clojure.spec.gen.alpha      (previously clojure.spec.gen)
    clojure.spec.test.alpha     (previously clojure.spec.test)

org.clojure/core.specs.alpha
    clojure.core.specs.alpha    (previously clojure.core.specs)

在大多数情况下,我们预计用户已将其对spec命名空间的引用进行了别名,更新到已更改的命名空间只需要在require处进行一次更改。

ClojureScript的spec实现将如何改变?

ClojureScript也将更改命名空间名称以匹配Clojure。最终,ClojureScript实现可能会从ClojureScript移出并进入spec.alpha库 - 这仍在讨论中。

为什么库和命名空间以alpha结尾?

"alpha"表示spec API和实现仍在发生变化。

当spec api不再被认为是alpha时会发生什么?

届时,我们预计将发布spec库的非alpha版本(使用非alpha命名空间)。用户可以立即开始使用该版本的spec以及它所依赖的任何版本的Clojure。Clojure本身将在稍后的某个时间点依赖于它。所有这些操作的时间安排尚待确定。

该库是否支持Clojure 1.8或更旧的版本?

否。spec使用了Clojure 1.9中的新函数,并且从未打算为旧版本提供spec。相反,我们正在尝试加速稳定Clojure 1.9的发布,以便用户可以迁移到具有访问spec的alpha版本和访问不断更新的版本的稳定生产版本。

1.9.0-alpha15 (2017年3月14日)

1.9.0-alpha15包含自1.9.0-alpha14以来的以下更改

  • CLJ-2043 - s/form of conformer已损坏

  • CLJ-2035 - 集合规范的s/form已损坏

  • CLJ-2100 - s/form of s/nilable应该包含原始规范,而不是解析后的规范

规范

  • CLJ-2062 - 为importrefer-clojure添加了规范

  • CLJ-2114 - ::defn-args规范错误地将映射主体解析为预后处理程序而不是函数主体

  • CLJ-2055 - binding-form规范错误地解析了仅包含符号的映射

基础设施

  • CLJ-2113 - Clojure Maven构建已更新

1.9.0-alpha14 (2016年10月28日)

1.9.0-alpha14包含自1.9.0-alpha13以来的以下更改

  • 新增 into 现在具有0元(返回[])和1元(返回您传递的集合)

  • 新增 halt-when 是一种当pred满足时结束转换的转换器。它接收一个可选的函数,该函数将使用迄今为止完成的结果和触发谓词的输入进行调用。

  • CLJ-2042 - clojure.spec/form of clojure.spec/? 现在解析pred

  • CLJ-2024 - clojure.spec.test/check 现在完全解析了别名fspec

  • CLJ-2032 - 如果fspec缺少:args规范,则修复了令人困惑的错误

  • CLJ-2027 - 修复了1.9中打印bean实例的回归

  • CLJ-1790 - 修复了将协议扩展到Java数组的错误

  • CLJ-1242 - 具有不兼容比较器的排序集或映射上的=现在返回false而不是抛出异常

1.9.0-alpha13 (2016年9月26日)

1.9.0-alpha13包含自1.9.0-alpha12以来的以下更改

  • 可空类型的s/conform始终返回传递的值,而不是已调整的值

  • s/nilable现在创建一个生成器,该生成器以10%的概率返回nil(而不是50%的概率)

  • s/nilable现在延迟实现谓词规范,直到第一次使用(对于创建递归规范更好)

  • clojure.spec.gen现在提供clojure.test.check.generators/frequency的dynload版本

1.9.0-alpha12 (2016年9月7日)

1.9.0-alpha12包含自1.9.0-alpha11以来的以下更改

  • spec性能已针对许多用例得到改进

  • spec explain打印机现在可以通过动态变量clojure.spec/*explain-out*进行插入,该变量应是一个函数,它接收explain-data并打印到*out*

  • 当宏展开期间宏规范失败时,抛出带有explain-data有效负载的ex-info,而不是IllegalArgumentException

  • *print-namespace-maps*为真时,pprint以命名空间字面量语法打印映射

  • CLJ-1988 - coll-of、every扩展为正确调整序列

  • CLJ-2004 - 多规范表单缺少retag

  • CLJ-2006 - 修复文档字符串中的旧函数名称

  • CLJ-2008 - 从checkable-syms中省略宏

  • CLJ-2012 - 修复gen-class签名上的ns规范以允许类名

  • CLJ-1224 - 记录实例现在像映射一样缓存hasheq和hashCode

  • CLJ-1673 - clojure.repl/dir-fn现在适用于命名空间别名

1.9.0-alpha11 (2016年8月19日)

1.9.0-alpha11包含自1.9.0-alpha10以来的以下更改

Clojure现在具有以下clojure.core宏的规范:let、if-let、when-let、defn、defn-、fn和ns。因为宏规范在宏扩展期间被检查,所以这些宏中的无效语法现在将在编译时失败,而一些错误在运行时被捕获,而一些错误根本没有被捕获。

  • CLJ-1914 - 修复了并发范围实现中的竞争条件

  • CLJ-1870 - 修复了重新加载defmulti会删除var上的元数据的问题

  • CLJ-1744 - 清除未使用的局部变量,在某些情况下可以防止内存泄漏

  • CLJ-1423 - 允许var以无限参数列表调用(而且更快)

  • CLJ-1993 - 添加了*print-namespace-maps*动态变量,该变量控制是否对键来自同一命名空间的映射使用命名空间映射语法。默认值为false,但标准REPL绑定将其设置为true。

  • CLJ-1985 - 修复了conformer的with-gen丢失unform函数的问题

  • 修复了clojure.spec.test/check以跳过已指定规范的宏

  • 修复了1.9.0-alpha8中的回归,其中解构中的类型提示丢失了

  • 修复了clojure.spec/merge文档字符串以注意merge不会传递已调整的值

  • 修复了正则表达式操作以在使用时使用生成器覆盖

1.9.0-alpha10 (2016年7月11日)

1.9.0-alpha10包含自1.9.0-alpha9以来的以下更改

  • 新增 clojure.core/any? - 一个匹配任何事物的谓词。any?具有内置的生成器支持。:clojure.spec/any规范已被移除。此外,已为some?添加了生成器支持。

  • keys*现在将生成

  • 生成器覆盖(参见c.s/gen、c.s./exercise、c.s.t/check、c.s.t/instrument)现在期望无参数函数返回生成器,而不是生成器

  • CLJ-1977 - 修复了alpha9中堆栈跟踪为空时Throwable数据转换的回归

1.9.0-alpha9 (2016年7月5日)

1.9.0-alpha9包含自1.9.0-alpha8以来的以下更改

  • 新增 clojure.spec/assert - 用于向代码中添加spec断言的功能。有关更多详细信息,请参阅*compile-asserts*和assert的文档。

  • clojure.spec/merge - 现在合并而不是在conform/unform中传递

  • clojure.spec.test/instrument现在报告导致:args规范失败的调用者并忽略已指定规范的宏

  • clojure.spec.test - testtest-fntestable-syms重命名为checkcheck-fncheckable-syms以更好地反映其用途。此外,check的一些返回值结构已得到进一步改进。

  • clojure.core/Throwable→map以前返回StackTraceElements,这些元素后来由打印机处理。现在StackTraceElements被转换为数据,以便返回值是纯Clojure数据,如预期的那样。

1.9.0-alpha8 (2016年6月28日)

1.9.0-alpha8包含自1.9.0-alpha7以来的以下更改

集合规范支持得到了极大的增强,并提供了用于调整、生成、计数、唯一元素和集合类型的新的控制。有关详细信息,请参阅every、every-kv、coll-of和map-of的文档。

检测和测试已简化并变得更具可组合性,并提供了用于规范和生成器覆盖、存根和模拟的强大新功能。请参阅clojure.spec.test中这些函数的文档:instrument、test、enumerate-ns和summarize-results。

命名空间关键字读取器格式、打印和解构已得到增强,以便为键提升命名空间,支持更简洁地使用完全限定的关键字。更新的文档将很快添加到clojure.org。

添加了许多实用程序,用于键规范合并、函数执行、Java 1.8时间戳、有界计数等。

变更日志

clojure.spec

  • [更改] map-of - 现在调整所有值和可选的所有键,具有其他类型、计数、生成器选项

  • [更改] coll-of - 现在调整所有元素,具有其他类型、计数、生成器选项。不再接收init-coll参数。

  • [添加] every - 通过采样验证集合,具有许多其他选项

  • [添加] every-kv - 通过采样验证映射,具有许多其他选项

  • [添加] merge

  • [更改] 生成器覆盖现在可以通过名称或路径指定

  • [更改] fspec生成器 - 创建一个函数,根据:ret规范生成返回值并忽略:fn规范

  • [添加] explain-out - 从explain-data结果生成explain输出字符串

  • [更改] explain-data - 输出现在是具有:path元素的问题向量,而不是以路径为键的映射

  • [新增] get-spec - 用于通过关键字或符号在注册表中查找规范

  • [移除] fn-spec - 请参考 get-spec

  • [新增] exercise-fn - 给定一个符合规范的函数,返回生成的实参和返回值

  • 所有仪器函数已移动到 clojure.spec.test

clojure.spec.test

  • [修改] instrument - 之前接受一个 var,现在接受一个符号、命名空间符号或符号或命名空间的集合,以及许多用于存根或模拟的新选项。查看文档字符串了解更多信息。

  • [移除] instrument-ns - 请参考 instrument

  • [移除] instrument-all - 请参考 instrument

  • [修改] unstrument - 之前接受一个 var,现在接受一个符号、命名空间符号或符号或命名空间的集合

  • [移除] unstrument-ns - 请参考 unstrument

  • [移除] unstrument-all - 请参考 unstrument

  • [新增] instrumentable-syms - 可以进行 instrumentation 的符号

  • [新增] with-instrument-disabled - 在特定作用域内禁用 instrument 对调用的检查

  • [修改] check-var 重命名为 test,并且签名不同,请查看文档

  • [修改] run-tests - 请参考 test

  • [修改] run-all-tests - 请参考 test

  • [修改] check-fn - 重命名为 test-fn

  • [新增] abbrev-result - 返回测试的简要描述

  • [新增] summarize-result - 返回多个测试的摘要

  • [新增] testable-syms - 可以进行测试的符号

  • [新增] enumerate-namespace - 提供命名空间中 var 的符号

clojure.core

  • [修改] - 当 Clojure 与 Java 8 一起使用时,inst-ms 现在可以与 java.time.Instant 实例一起使用

  • [新增] bounded-count - 如果 coll 是可计数的,则返回其计数,否则使用其 seq 对 coll 的前 n 个元素进行计数

1.9.0-alpha7 (2016年6月15日)

1.9.0-alpha7 包含自 1.9.0-alpha6 以来(所有相对于 alpha5/6 的破坏性更改)的以下更改

clojure.core: - long? ⇒ int? - 现在检查所有 Java 固定精度整数类型(byte、short、integer、long) - pos-long? ⇒ pos-int? - neg-long? ⇒ neg-int? - nat-long? ⇒ nat-int?

clojure.spec: - long-in-range? ⇒ int-in-range? - long-in ⇒ int-in

如果您有兴趣专门检查 long?,请使用 #(instance? Long %)。

对于此切换,我们表示歉意,并欢迎您来到 alpha 城!

1.9.0-alpha6 (2016年6月14日)

1.9.0-alpha6 包含自 1.9.0-alpha5 以来以下更改

  • & 正则表达式运算符现在在正则表达式通过但谓词未通过时快速失败

  • alt/or 的返回值现在是映射条目(支持键/值),而不是 2 元素向量

  • [破坏性更改] fn-specs 重命名为 fn-spec,并返回注册的 fspec 或 nil

  • fspec 现在接受 ifn?,而不是 fn?

  • fspec 实现支持其 :args、:ret 和 :fn 规范的关键字查找

  • 修复缺少键的 fspec describe,并改进 :args/:ret/:fn 规范的 describe

  • instrument 现在**仅**检查 var 的 :args 规范 - 使用 clojure.spec.test 函数来测试 :ret 和 :fn 规范

  • 为 bytes? 和 uri? 添加了生成器支持,这些在 alpha5 中意外地被遗漏了

1.9.0-alpha5 (2016年6月7日)

1.9.0-alpha5 包含自 1.9.0-alpha4 以来以下更改

修复:- 当不存在规范时,doc 正在打印“Spec” - 修复 ? explain

核心中的新谓词(所有这些现在在规范中也具有内置的生成器支持):- seqable? - boolean? - long?、pos-long?、neg-long?、nat-long? - double?、bigdec? - ident?、simple-ident?、qualified-ident? - simple-symbol?、qualified-symbol? - simple-keyword?、qualified-keyword? - bytes?(用于 byte[]) - indexed? - inst?(以及新的 inst-ms) - uuid? - uri?

规范中的新增功能:- unform - 给定一个规范和一个符合规范的值,返回未符合规范的值 - 新谓词:long-in-range?、inst-in-range? - 新规范(具有 gen 支持):long-in、inst-in、double-in

1.9.0-alpha4 (2016年5月31日)

1.9.0-alpha4 包含自 1.9.0-alpha3 以来以下更改

  • 修复描述空 cat

  • 改进 update-in 性能

  • 优化 seq (&) 解构

1.9.0-alpha3 (2016年5月26日)

1.9.0-alpha3 包含自 1.9.0-alpha2 以来以下更改

  • 宏 fdef 规范不再规范隐式的 &form 或 &env [破坏性更改]

  • multi-spec 在路径中包含分派值

  • multi-spec 不再需要特殊默认方法

  • 修复 rep* 错误

  • 添加 explain-str(返回字符串的 explain)

  • 改进 s/+ explain

  • explain 输出进行了调整

  • 修复测试报告

1.9.0-alpha2 (2016年5月25日)

1.9.0-alpha2 包含自 1.9.0-alpha1 以来以下更改

  • 改进 s/+ 的 describe

  • 捕获 gen 调用时的**递归限制**

  • explain-data 现在包含输入路径的 :in 键

  • CLJ-1931 - with-gen 抛出 AbstractMethodError

1.9.0-alpha1 (2016年5月24日)

1.9.0-alpha1 包含 clojure.spec 的第一个版本。

规范的使用指南现已提供:https://clojure.org/guides/spec