{:aliases
{:clj/next
{:override-deps
{org.clojure/clojure {:mvn/version "1.10.0-alpha5"}}}}}
官方的 变更日志 记录了主要稳定版本之间的差异。此页面收集了开发期间的临时开发版本公告。
Alpha - 开发中的新功能和增强功能
Beta - 仅修复 bug,预计不会有新的功能开发
RC - 发布候选版本,除非发现严重问题,否则将发布为最终版本
注意:所有开发版本都可能包含自上一个版本以来新工作带来的重大变更。
修复 CVE CVE-2024-22871,详细内容见 GHSA-vr64-r9qj-h27f
CLJ-2839 - iterate
、cycle
、repeat
- 无限序列具有无限的 hashCode()
功能
增强功能
CLJ-2777 - clojure.java.process/start
- 添加 :clear-env
选项以清除父环境中的环境变量
CLJ-2828 - clojure.java.process/capture
- 已移除,请改用 slurp
CLJ-1162 - deref
- 在非 IDRef 上调用时改进错误消息
CLJ-2225 - assert
和 assert
- 改进文档字符串以添加上下文
CLJ-2290 - into
- 在文档字符串中添加 0 元和 1 元
CLJ-2552 - reify
- 改进文档字符串并修复示例
CLJ-2640 - ex-info
- 现在处理 nil 数据映射
CLJ-2783 - 替换对已弃用的 URL 构造函数的调用
错误修复
CLJ-2804 lazy-seq、delay - 为了避免在同步块下运行用户代码,用 ReentrantLock 替换 synchronized
错误修复
先前 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 - 删除默认值覆盖的验证检查
CLJ-2521 从 alpha2 中回退此修复,因为它似乎改变了另一个错误 (CLJ-2743) 的出现位置,将一起重新审视这些问题
修复 CVE CVE-2024-22871,详细内容见 GHSA-vr64-r9qj-h27f
CLJ-2839 - iterate
、cycle
、repeat
- 无限序列具有无限的 hashCode()
CLJ-2701 将 Keyword 和 ArraySeq 的 serialVersionUID 固定回 1.10.3 值以保留二进制序列化
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 时挂起的问题(新的更改更有针对性,并解决了更多情况)
CLJ-2673 添加 abs
,并更新 min
和 max
以在可能的情况下使用 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)
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)
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)
CLJ-2504 为 clojure.main 中的错误报告提供更多选项
CLJ-2454 - 修复从调用匹配的反射调用引发的 IllegalAccessException
CLJ-2449 - 将 serialized-require 设置为私有
CLJ-2435 - 在编译和宏扩展错误中包含根原因类名
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 中的更改
除了之前的扩展方法之外,值现在可以通过添加元数据来扩展协议,其中键是命名协议函数的完全限定符号,值是函数实现。协议实现首先检查直接定义(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
1.10.0-beta3 包含自 1.10.0-RC1 以来进行的以下更改
datafy - 将 :name 添加到数据化类和命名空间,将 :class 添加到所有数据化的元数据中
CLJ-1079 - 读取器应保留而不是覆盖列表和序列上的 :line :column 元数据。还要使 clojure.main 基于 :file 元数据绑定 *file*。
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 包含自 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
的结果描述为惰性
Clojure 1.10.0-alpha6 现已可用。
1.10.0-alpha6 包含自 1.10.0-alpha5 以来以下更改
CLJ-2367 - 集成 ASM 回归的修复并添加案例测试 - 感谢 Sean Corfield 提供的补丁以及 Daniel Sutton 和 Ghadi Shayban 在跟踪问题时的帮助。
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
CLJ-2313 - 字符串捕获模式的修复
构建中有一个新的 Maven 配置文件和 Ant 目标,用于构建包含依赖项 (以及 test.check) 的可执行 Clojure jar。这对于开发 Clojure 本身或仅克隆存储库并进行快速构建以获得可运行内容很有用。
readme.txt 已更新,其中包含有关如何创建和运行本地 jar 的信息。
停止发布 clojure-VERSION.zip 文件作为发布的一部分。
与 1.9.0-beta4 相同
CLJ-2259 - 删除 1.9 中添加的不必要的 bigdec? 谓词
将 spec.alpha 依赖项升级到 0.1.143
CLJ-2254 - 添加系统属性 clojure.spec.skip-macros (默认值=false),可用于关闭宏中的 spec 检查
1.9.0-beta2 包含自 1.9.0-beta1 以来以下更改
1.9.0-beta1 包含自 1.9.0-alpha20 以来以下更改
CLJ-2077 - Clojure 无法从 java 9 下的引导类路径加载
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? - 修复文档字符串
使默认导入集在 RT 中公开
现在可以将 *reader-resolver*
绑定到 LispReader$Resolver 的实现,以控制读取器在解析自动解析的关键字和映射时对命名空间交互的使用。
加强自动解析的关键字和自动解析的命名空间映射语法,以仅支持别名,如最初预期的那样
更新为使用 core.specs.alpha 0.1.24
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:
将您的Clojure依赖项更新为[org.clojure/clojure "1.9.0-alpha16"] - 这将自动引入2个额外的下游库
更改声明或使用规范的命名空间中的命名空间声明为
(:require [clojure.spec.alpha :as s]
[clojure.spec.gen.alpha :as gen]
[clojure.spec.test.alpha :as stest])
我们将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包含自1.9.0-alpha14以来的以下更改
规范
基础设施
CLJ-2113 - Clojure Maven构建已更新
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包含自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包含自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包含自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包含自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包含自1.9.0-alpha8以来的以下更改
新增 clojure.spec/assert - 用于向代码中添加spec断言的功能。有关更多详细信息,请参阅*compile-asserts*
和assert的文档。
clojure.spec/merge - 现在合并而不是在conform/unform中传递
clojure.spec.test/instrument现在报告导致:args规范失败的调用者并忽略已指定规范的宏
clojure.spec.test - test
、test-fn
、testable-syms
重命名为check
、check-fn
和checkable-syms
以更好地反映其用途。此外,check
的一些返回值结构已得到进一步改进。
clojure.core/Throwable→map以前返回StackTraceElements,这些元素后来由打印机处理。现在StackTraceElements被转换为数据,以便返回值是纯Clojure数据,如预期的那样。
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 包含自 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 包含自 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 包含自 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 包含自 1.9.0-alpha3 以来以下更改
修复描述空 cat
改进 update-in 性能
优化 seq (&) 解构
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 包含自 1.9.0-alpha1 以来以下更改
改进 s/+ 的 describe
捕获 gen 调用时的**递归限制**
explain-data 现在包含输入路径的 :in 键
CLJ-1931 - with-gen 抛出 AbstractMethodError
1.9.0-alpha1 包含 clojure.spec 的第一个版本。
规范的使用指南现已提供:https://clojure.org/guides/spec。