byteArrayToHex byteArrayToString hexToByteArray ...
2019 年 11 月 18 日
ClojureScript 团队
set/union
和 into
的行为现在与 Clojure 保持一致。
subvec
的参数检查现在与 Clojure 保持一致。
在数组上 apply
vector
现在会正确克隆数组。
编译器现在为 Google Closure 命名空间生成分析元数据。这意味着对于这些命名空间
REPL 功能,例如 doc
、dir
、apropos
等,现在可以正常工作了。
参数列表可用,从而启用参数个数检查。
返回值类型可用,增强类型推断。
将生成关于私有变量使用的警告。
为了说明,让我们 (require '[goog.crypt :as crypt])
并探索它在 REPL 中。
现在,(dir crypt)
将列出该命名空间中的函数。
byteArrayToHex byteArrayToString hexToByteArray ...
文档字符串可用;(doc crypt/hexToByteArray)
将生成
------------------------- goog.crypt/hexToByteArray ([hexString]) /** * Converts a hex string into an integer array. ...
参数个数信息可用。向其中一个函数传递不正确的参数个数将生成参数个数警告。例如,(crypt/hexToByteArray "abc" 123)
将生成
WARNING: Wrong number of args (2) passed to goog.crypt/hexToByteArray at line 1 <cljs repl>
此版本对 ClojureScript 的类型推断做出了几项改进。
这可以通过示例来说明
(defrecord Complex [re im])
(let [x (->Complex 1.1 2.7)]
(:re x))
为最后一个表达式生成的代码将是 x.re
。这可以比之前快 66% 到 450%。
count
对字符串和数组的专门化如果将 count
应用于静态推断为字符串或数组的值,则生成的 JavaScript 将涉及直接访问 length
字段,而不是对 count
进行运行时调用。
例如,(count "abc")
将导致 "abc".length
被发出。根据上下文,这可能快几个数量级。
simple-
/ qualified-
谓词引起的推断如果 simple-keyword?
或 qualified-keyword?
对本地变量成立,则该本地变量将被推断为关键字。类似地,simple-symbol?
或 qualified-symbol?
将导致本地变量被推断为符号。
这实质上将现有的 keyword?
和 symbol?
的谓词引起的推断扩展到这些额外的核心谓词。
有关 ClojureScript 1.10.597 中所有更新的完整列表,请参阅 变更。