{:aliases
{:clj/next
{:override-deps
{org.clojure/clojure {:mvn/version "1.10.0-alpha5"}}}}}
官方 變更日誌 追蹤主要穩定版本之間的差異。此頁面收集開發期間的臨時開發版本公告。
Alpha - 開發中的新功能工作和增強功能
Beta - 僅修復錯誤,不預期有新功能工作
RC - 候選版本,除非發現重大問題,否則將發布為最終版本
注意:所有開發版本都可能因自上次版本以來的全新工作而有重大變更。
修復 CVE-2024-22871 中詳述的 CVE,詳細資訊請見 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
錯誤修正
先前 1.12.0 alpha 版本中的修正
CLJ-2772 drop、nthrest、nthnext - 修正 n != 正整數時行為的回歸
CLJ-2741 drop - 修正 StringSeq 不適當保留的 meta
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-2024-22871 中詳述的 CVE,詳細資訊請見 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 - 修正呼叫 xdg-open 時 browse-url
暫停(新的變更更具針對性,且涵蓋更多案例)
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 文件字串,關於尾隨空白部分
CLJ-2249 釐清 clojure.core/get 文件字串,關於集合、字串、陣列、ILookup
CLJ-2488 新增定義至 reify 文件字串
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 延遲的 realized? 不會阻擋待處理的結果
CLJ-2649 修復 some-fn 和 every-pred 中的檢查順序,針對 3 個謂詞的情況,以符合其他展開
CLJ-2636 定義 *clojure-version* 時,擺脫對 java.util.Properties 的反映
CLJ-2350 改善關鍵字元數例外訊息
CLJ-2444 修復 test-vars 文件字串中的錯字
CLJ-1509 AOT 編譯更多 Clojure 命名空間
CLJ-2387 修復 socket 伺服器埠驗證中的一位差錯
更新相依項至 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-beta4 包含自 1.10.0-beta3 以來的下列變更
CLJ-2417 sort 和 sort-by 應保留元資料
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 - 在某些情況下重複使用 seq
CLJ-1764 - 當存取無限分割區的一個元素時,partition-by 會執行無限迴圈
CLJ-2044 - 為 clojure.instant 中的函式新增 arglist meta
CLJ-1797 - require 失敗時,在錯誤中提及 cljc
CLJ-1832 - unchecked-* 函式在基本型 long 與 boxed Long 上有不同的行為
CLJ-1366 - 空的 map 文字會在每次讀取時被視為不同的 map
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
的結果為 lazy
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 - 當新 meta 與先前 meta 相同時,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 - (新增)新增新的 ## 讀取巨集,用於符號值,以及對雙值 vals ##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 - 將傳回型別標記為字串
CLJ-2108 - (啟動時間) 延遲載入規格和核心規格 (這方面還有更多工作要做)
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 - (修正) 文件 - 未正確擴充特殊情況 (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 - 改進文件字串,重新關閉代理
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 本身的 spec 在命名空間 clojure.core.specs 中已移至外部函式庫 core.specs.alpha,Clojure 現在依賴於此函式庫
clojure.core.specs 命名空間已變更為 clojure.core.specs.alpha。該命名空間中的所有合格 spec 名稱都遵循相同的命名空間變更(大多數人並未直接使用這些名稱)
在大多數情況下,你可以透過下列方式將 Clojure 1.9.0-alphaX 的使用方式更新為 Clojure 1.9.0-alpha16
將你的 Clojure 相依性更新為 [org.clojure/clojure "1.9.0-alpha16"] - 這將自動提取 2 個額外的下游函式庫
將你的命名空間宣告變更為宣告或使用 spec 的命名空間
(: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 之前,仍有許多設計問題需要解決。這讓我們得以朝向依賴於 spec alpha 版本的生產 Clojure 版本(1.9)邁進。使用者也可以根據需要選用較新的 spec alpha 函式庫版本。此外,這也是朝向在 Clojure 中利用相依性的支援邁出的第一步。
我們將建立兩個新的貢獻函式庫,這些函式庫將包含下列(重新命名)命名空間
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 時,會發生什麼事?
在那個時間點,我們預期將釋出非 alpha 版本的 spec 函式庫(搭配非 alpha 命名空間)。使用者可以立即開始使用該版本的 spec,以及它所依賴的任何 Clojure 版本。Clojure 本身將在稍後依賴於它。所有這些動作的時間點仍待確定。
該函式庫是否會支援 Clojure 1.8 或較舊版本?
不會。spec 使用 Clojure 1.9 中的新函式,而且從未有為舊版本提供 spec 的目標。相反地,我們正試圖加速發布穩定的 Clojure 1.9,以便使用者可以向前遷移至穩定的生產版本,並存取 alpha 版本的 spec,以及在它們可用時存取持續更新的版本。
1.9.0-alpha15包含自1.9.0-alpha14以來的下列變更
規格
基礎架構
CLJ-2113 - 已更新Clojure maven建置
1.9.0-alpha14包含自1.9.0-alpha13以來的下列變更
新增into
現在具有0元性(傳回[])和1元性(傳回您傳遞的coll)
新增halt-when
是一個轉換器,當pred滿足時結束轉換。它採用一個選用的fn,該fn將與迄今為止已完成的結果和觸發謂詞的輸入一起呼叫。
CLJ-2042 - clojure.spec/form of clojure.spec/?現在解析pred
CLJ-2024 - clojure.spec.test/check現在完全解析別名的fspecs
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 of nilable總是傳回已傳遞的值,而非已符合的值
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*
當巨集 spec 在巨集擴充期間失敗時,擲回 ex-info 並附上 explain-data 負載,而非 IllegalArgumentException
當 *print-namespace-maps*
為 true 時,pprint 會使用名稱空間文字語法列印映射
CLJ-1988 - coll-of、every 已擴充以正確符合序列
CLJ-2004 - 多重 spec 表單遺失重新標記
CLJ-2006 - 修正文件字串中的舊函式名稱
CLJ-2008 - 從可檢查符號中省略巨集
CLJ-2012 - 修正 gen-class 簽章上的 ns spec 以允許類別名稱
CLJ-1224 - 記錄實例現在會快取 hasheq 和 hashCode,就像映射一樣
CLJ-1673 - clojure.repl/dir-fn 現在可作用於名稱空間別名
1.9.0-alpha11 包含自 1.9.0-alpha10 以來的以下變更
Clojure 現在有下列 clojure.core 巨集的 spec:let、if-let、when-let、defn、defn-、fn 和 ns。由於巨集 spec 會在巨集擴充期間進行檢查,因此現在這些巨集中無效的語法會在編譯期間失敗,而過去有些錯誤會在執行期間捕獲,有些則根本不會捕獲。
CLJ-1914 - 修正並行範圍實現中的競爭條件
CLJ-1870 - 修正重新載入 defmulti 會移除變數上的元資料
CLJ-1744 - 清除未使用的區域變數,這可以在某些情況下防止記憶體外洩
CLJ-1423 - 允許變數以無限參數清單呼叫(而且速度更快)
CLJ-1993 - 新增動態變數 *print-namespace-maps*
,用以控制是否對來自相同名稱空間的鍵使用名稱空間映射語法。預設為 false,但標準 REPL 繫結會將它設為 true。
CLJ-1985 - 修正 with-gen of conformer 遺失 unform fn
已修正 clojure.spec.test/check 以略過已規範的巨集
已修正 1.9.0-alpha8 中的回歸,其中解構中的類型提示已遺失
已修正 clojure.spec/merge 文件字串以註明合併不會傳遞符合的值
已修正正規表示式運算,以在使用時使用 gen 覆寫
1.9.0-alpha10 包含自 1.9.0-alpha9 以來的下列變更
新增 clojure.core/any? - 一個與任何事物相符的謂詞。any? 已內建 gen 支援。:clojure.spec/any 規範已移除。此外,已為 some? 新增 gen 支援。
keys* 現在會產生
gen 覆寫 (請參閱 c.s/gen、c.s./exercise、c.s.t/check、c.s.t/instrument) 現在預期會傳回 gen 的無引數函數,而非 gen
CLJ-1977 - 修正 alpha9 中的回歸,在堆疊追蹤為空時,修正 Throwable 的資料轉換
1.9.0-alpha9 包含自 1.9.0-alpha8 以來的下列變更
新增 clojure.spec/assert - 一個用於新增規範斷言至您的程式碼的工具。請參閱 *compile-asserts*
和 assert 的文件以取得更多詳細資料。
clojure.spec/merge - 現在會合併,而非在符合/不符合中傳遞
clojure.spec.test/instrument 現在會回報導致 :args 規範失敗的呼叫者,並略過已規範的巨集
clojure.spec.test - test
、test-fn
、testable-syms
已重新命名為 check
、check-fn
和 checkable-syms
,以更準確反映其目的。此外,check
的部分回傳值結構已進一步改善。
clojure.core/Throwable→map 以前會回傳堆疊追蹤元素,這些元素稍後會由印表機處理。現在,堆疊追蹤元素會轉換為資料,讓回傳值成為純粹的 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。
已新增許多實用程式,用於鍵規格合併、fn 練習、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 - 可進行儀器化的符號
[已新增] 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 - 提供命名空間中變數的符號
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 描述,並改善 :args/ret/fn 規格的描述
instrument 現在僅檢查變數的 :args 規格 - 使用 clojure.spec.test 函數測試 :ret 和 :fn 規格
新增 bytes? 和 uri? 的產生器支援,這些支援在 alpha5 中意外遺漏
1.9.0-alpha5 包含自 1.9.0-alpha4 以來的下列變更
修正:- 文件列印「Spec」時,若不存在則修正?說明
核心中的新謂詞(所有謂詞現在在 spec 中也都有內建產生器支援):- 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?
spec 中的新功能:- unform - 給定 spec 和一個符合的數值,傳回不符合的數值 - 新的謂詞:long-in-range?, inst-in-range? - 新的 spec(有產生器支援):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 spec 不應再指定隱含的 &form 或 &env [重大變更]
multi-spec 在路徑中包含分派值
multi-spec 不再需要特殊預設方法
修正 rep* 錯誤
新增 explain-str(explain 傳回字串)
改善 s/+ explain
調整 explain 輸出
修正測試回報
1.9.0-alpha2 包含自 1.9.0-alpha1 以來的下列變更
為 s/+ 提供更好的描述
在 gen 呼叫中擷取 recursion-limit
explain-data 現在包含輸入路徑的 :in 鍵
CLJ-1931 - with-gen 擲回 AbstractMethodError
1.9.0-alpha1 包含 clojure.spec 的第一個版本。
spec 的使用指南現在已提供:https://clojure.dev.org.tw/guides/spec。