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

评论者:mfikes

CLJS-3118.patch 通过了 Canary (/)

0
...