请在 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}} 中,这似乎是可行的,因为它被应用于一个向量字面量。

在 {{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
...