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 保留元数据

这个简单的更改使 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 支持中的一些 bug,以解决解析和打印 #inst 值时非常早期的日期问题。

性能改进

减少为映射解构宏生成的代码

通过引入一个共享的帮助程序来处理 kw-args,优化了为实现映射解构而生成的代码,将 Closure 优化后的输出的一部分从 35 字节减少到 5 字节,这是一个不错的节省,因为映射解构在代码中经常使用。

更改列表

有关 ClojureScript 1.10.844 中所有更新的完整列表,请参阅 更改.

贡献者

感谢所有为 ClojureScript 1.10.844 做出贡献的社区成员

  • Arne Brasseur

  • Erik Assum

  • Hyunwoo Nam

  • Matthew Huebert

  • Thomas Heller