Clojure 2024状况调查 中分享您的想法!

欢迎!有关此职能的更多信息,请参阅 关于 页面。

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}} 中,这似乎是 okay,因为它被应用于一个 vector 字面量。

在 {{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 投票
by

评论由:mfikes

将CLJS-3118.patch添加到补丁提供者(i)

0 投票
by

评论由:mfikes

CLJS-3118.patch通過Canary(/)

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