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

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

0
ClojureScript

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

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

5 个回答

0
_评论由:mfikes_

CLJS\-3118.patch在三个地方转换为{{-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 已添加到补丁提交(i)

0

评论由:mfikes

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

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