ClojureScript

1.10.741 版本

2020 年 4 月 24 日
ClojureScript 团队

我们很高兴地宣布 ClojureScript 的一个新版本。如果您是 ClojureScript 的现有用户,请仔细阅读以下发行说明,因为有两个非常重要的变化。首先,ClojureScript 现在提供了对与流行的 JavaScript 打包工具(如 Webpack 和 Metro)集成的增强支持。其次,由于 Google Closure Compiler 和 Library 的持续变化,我们已决定放弃对 Rhino 和 Nashorn REPL 的支持,以降低发行版维护工作量。

值得注意的更改

  • Closure Compiler 已更新至 v20200112

  • Closure Library 已更新至 0.0-20191016-6ae1f72f

  • Rhino、Nashorn 和 GraalJS REPL 已被移除

最新的 Closure Compiler 和 Library 版本包含一些重大更改,这些更改大幅增加了此版本维护工作量。鉴于 Closure Compiler 和 Library 最近的变化速度,我们已决定将精力集中在必要的浏览器和 Node.js REPL 上。我们还开始丰富 CLI 和 REPL API,以简化第三方为这些 JavaScript 环境提供支持的努力。

新的核心功能

JavaScript 打包工具支持

  • :target :bundle

  • :bundle-cmd

  • :target-fn

  • 新的 --install-deps CLI 选项

我们很高兴地宣布一项重要的新功能 - :bundle 目标。此目标生成可以直接输入到流行的 JavaScript 打包工具(如 Webpack 和 Metro(用于 React Native))中的输出。这不仅极大地简化了 Node 模块的使用,而且库创建者现在可以分发依赖于 Node 模块的 ClojureScript 工件,并确信用户无论使用哪种构建工具,都可以使用这些工件。

关于 :bundle 目标还有很多要说的,我们很快就会发布单独的帖子和指南。

迭代器支持

现在可以对实现 JavaScript 迭代器协议的任何对象调用 seq。此功能引入了新的核心谓词 cljs.core/js-iterable?

例如,(js-iterable? (js/Set.))true,并且

(-> (doto (js/Set.) (.add 1) (.add 2))
  seq)

现在可以生成 (1 2)

符号支持

添加了新的核心谓词 cljs.core/js-symbol?,并且已修改打印功能以允许打印符号

cljs.user=> (js/Symbol "abc")
#object[Symbol(abc)]

警告改进

单参数算术运算现在会在错误参数上发出警告

cljs.user=> (+ "foo")
WARNING: cljs.core/+, all arguments must be numbers, got [string] instead at line 1 <cljs repl>

性能改进

  • re-patternre-matchesre-find 现在更快

  • 代码生成更好地支持协议静态分派内联

  • 浏览器 REPL 的快速初始提示

  • 针对简单的“Hello World”程序,输出大小已最小化

更改列表

有关 ClojureScript 1.10.741 中所有更新的完整列表,请参见 更改

贡献者

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

  • Camilo Polymeris

  • Colin Kahn

  • Dieter Komendera

  • Dominic Monroe

  • Roman Liutikov