参与 2024 年 Clojure 状态调查!,分享您的想法。

欢迎!有关如何使用本网站的更多信息,请参阅 关于 页面。

0
ClojureScript

我们失去了 CLJS-1884 中引入的优化,但是它们看起来可以通过将 3 个 {{with-meta}} 转换为 {{-with-meta}} 来重新获得。

在执行 {{(prn :hi)}} 的简单程序中,可以看到输出从 96,990 字节降至 89,429 字节。

5 答案

0
_评论由:mfikes_制作

CLJS\-3118.patch 在 3 个地方转换为 {{-with-meta}}

在 {{MapEntry}} 中,这似乎是正确的,因为它适用于一个矢量文字。

在 {{vec}} 和 {{set}} 中,{{with-meta}} 先前应用于满足 {{vector?}} 和 {{set?}} 的值。假设这些非 {{nil}} 值不需要也满足 {{goog/isFunction}},那么 {{with-meta}} 将在这些值上调用 {{-with-meta}}。因此,这种变化也可能因为内联和省略了一些检查而带来轻微的性能优化。

另一方面,如果满足 {{goog/isFunction}} 的值传递给 {{vec}} 或 {{set}} 并导致代码遵循此路径(通过满足 {{vector?}} / {{set?}}),那么更改的正确性似乎也取决于该值是否正确实现了 {{-with-meta}}。这似乎只会出现在代码做了奇怪的事情的情况下,例如


(extend-type function IVector (-assoc-n [_ _ _]))


或者


(extend-type function ISet (-disjoin [_ _]))
0

评论由:mfikes

CLJS-3118.patch 通过 CI (/)

0

评论由:mfikes

CLJS-3118.patch 已添加到 Patch Tender (i)

0
by

评论由:mfikes

CLJS-3118.patch通过Canary (/)

0
by
参考: https://clojure.atlassian.net/browse/CLJS-3118 (由mfikes报告)
...