ClojureScript

1.10.844 版本發佈

2021 年 4 月 6 日
ClojureScript 團隊

我們很高興宣佈 ClojureScript 的新版本發佈。如果您是 ClojureScript 的現有使用者,請仔細閱讀以下發佈說明。

值得注意的重大變更

  • Closure Compiler 已更新至 v20210302

  • Closure Library 已更新至 0.0-20201211-3e6c510d

請注意,最新的 Closure Library 版本包含可能會影響您程式碼的重大變更

  • goog.debug.Logger.Level 已重新命名為 goog.Logger.Level,且 goog.log.Level/getLogger 函式現在需要額外的引數。

  • 已移除以下 JavaScript 型別檢查述詞:goog/isStringgoog/isArraygoog/isFunctiongoog/isNumbergoog/isBoolean

  • Closure 命名空間載入邏輯已修改,需要更新某些 REPL。

新的核心功能

函式庫屬性命名空間

當使用以 JavaScript 物件形式公開的 JavaScript 函式庫時,您現在可以指定此物件的屬性,以在 ClojureScript 中作為第一級命名空間使用。若要執行此操作,請使用 $ 分隔符號。

例如,由 npm-lib 提供的函式庫物件的 SubLib 屬性可以這樣視為命名空間

(ns foo
  (:require [npm-lib$SubLib :as sub-lib :refer [...]]))

如果需要,您也可以使用基於字串的 require

(ns foo
  (:require ["@npm/lib$SubLib" :as sub-lib :refer [...]]))

此功能還可用於存取 default 匯出

(ns foo
  (:require [npm-lib$default :as npm-lib :refer [...]]))

$ 分隔符號僅在存取最上層的物件屬性時才需要;任何巢狀屬性都透過 . 存取,如下例所示

(ns foo
  (:require [react-native$NativeModules.SomeBridge :as woz]))

值得注意的修正

cljs.test 中精確的檔案名稱和行號

現在,檔案名稱和行號不是從 do-report 中的呼叫堆疊不精確地推斷,而是基於元資料在巨集擴充期間擷取。

sortsort-by 保留 meta

這個簡單的變更使 sortsort-by 與 Clojure 保持一致。例如,以下評估為 {:a true}

(meta (sort (with-meta (range 10) {:a true})))

range 的浮點問題

解決了 range 的一些浮點問題,例如使 (range 0 (+ 1 (/ 9)) (/ 9)) 有 10 個元素,並使 (nth (range 0 1 0.1) 6) 正確評估為 0.6

#inst 解析和列印,反映預測格里曆

JavaScript 採用預測格里曆日期系統,現在已針對非常舊的日期修正 ClojureScript 的 #inst 支援中的一些錯誤,關於解析和列印 #inst 值。

效能改進

減少用於映射的解構巨集產生的程式碼

實作映射解構產生的程式碼已透過引入共用的 helper 來處理 kw-args 進行最佳化,將 Closure 最佳化輸出的部分從 35 個位元組減少到 5 個位元組,這是一項很好的節省,因為映射解構經常在程式碼中使用。

變更清單

如需 ClojureScript 1.10.844 中完整更新清單,請參閱 變更

貢獻者

感謝所有為 ClojureScript 1.10.844 做出貢獻的社群成員

  • Arne Brasseur

  • Erik Assum

  • Hyunwoo Nam

  • Matthew Huebert

  • Thomas Heller