Clojure 2024调查问卷中分享您的想法!

欢迎!请查看关于页面以了解更多关于如何使用本网站的信息。

+1
ClojureScript

如果您的代码中有 1. },则生成的代码为

cljs.core.into.call(null,cljs.core.PersistentQueue.EMPTY,cljs.core.PersistentVector.EMPTY)

当可以生成

cljs.core.PersistentQueue.EMPTY

https://github.com/clojure/clojurescript/blob/f289ffee2270567f7976d45012a0a52c38eb6488/src/main/clojure/cljs/tagged_literals.cljc#L21

13 个答案

0

评论者:colinkahn

这是对这个问题的尝试。不确定测试是否正确。

0

评论者:mfikes

嗨,Colin。感谢您的贡献!您已经签署了CA吗?我没有在这里看到您的名字https://clojure.org/community/contributors

如果没有,请参阅https://script.clojure.org/community/contributing

0

评论者:colinkahn

迈克,

我今天早上刚刚这样做,我的电子邮件中已经收到确认。

0

评论者:mfikes

太好了,我会审查这个补丁。

0

评论者:mfikes

嗨Colin,

对于你的第二个测试,你是否想检查这个?

(instance? PersistentQueue #queue [1 2 3])

实际上测试这个补丁,我能想到的唯一方法是检查生成的代码。查看

(binding [*print-fn-bodies* true] (pr-str (fn [] #queue [])))

似乎有点像是一个手段,但你可以检查产生的字符串是否包含 {{PersistentVector}},如果是的话,测试将失败。

0

评论者:colinkahn

是的,我确实想检查类型。奇怪的是,在测试报告中我没有收到失败的提示。我很想知道是否有办法只运行测试集的一部分?

你对使用 with-redefs 的看法如何?

`(with-redefs [into (fn [& _] (throw (ex-info "Inefficiently created PersistentQueue" {})))] #queue [])`

0

评论者:mfikes

嗨Colin,

我不知道是否有办法仅运行测试集的一部分。顺便说一下,Travis CI 构建失败了 https://travis-ci.org/mfikes/clojurescript/builds/430674720

我确实喜欢你的 with-redefs 方法。比我之前的字符串手段更巧妙。 :)

0

评论者:colinkahn

迈克,

我已经更新了附带的补丁。

这些测试实际上在你运行 'lein test' 时不会运行,看起来Travis使用 jsc 运行它们进行构建。我在本地复制的,不确定是否有命令能让这更容易。

0

评论者:mfikes

谢谢。我将检查已修订的补丁。这些测试是通过 {{script/test}} 运行的。更多信息请访问 https://script.clojure.org/community/running-tests

0

评论者:mfikes

随着补丁1. 是免费的。

基准测试:1. }

之前

基准测试与 V8 [f (fn [] (cljs.core/into cljs.core.PersistentQueue.EMPTY []))], (f), 100000000 运行,442 毫秒;基准测试与 SpiderMonkey [f (fn [] (cljs.core/into cljs.core.PersistentQueue.EMPTY []))], (f), 100000000 运行,988 毫秒;基准测试与 JavaScriptCore [f (fn [] (cljs.core/into cljs.core.PersistentQueue.EMPTY []))], (f), 100000000 运行,2041 毫秒;基准测试与 Nashorn [f (fn [] ( cljs.core/into cljs.core.PersistentQueue.EMPTY []))], (f), 100000000 运行,47257 毫秒;基准测试与 ChakraCore [f (fn [] ( cljs.core/into cljs.core.PersistentQueue.EMPTY []))], (f), 100000000 运行,3040 毫秒;基准测试与 GraalVM [f (fn [] ( cljs.core/into cljs.core.PersistentQueue.EMPTY []))], (f), 100000000 运行,296 毫秒。

之后

基准测试与 V8 [f (fn [] cljs.core.PersistentQueue.EMPTY)], (f), 100000000 运行,0 毫秒;基准测试与 SpiderMonkey [f (fn [] cljs.core.PersistentQueue.EMPTY)], (f), 100000000 运行,0 毫秒;基准测试与 JavaScriptCore [f (fn [] cljs.core.PersistentQueue.EMPTY)], (f), 100000000 运行,0 毫秒;基准测试与 Nashorn [f (fn [] cljs.core.PersistentQueue.EMPTY)], (f), 100000000 运行,-1 毫秒;基准测试与 ChakraCore [f (fn [] cljs.core.PersistentQueue.EMPTY)], (f), 100000000 运行,-5 毫秒;基准测试与 GraalVM [f (fn [] cljs.core.PersistentQueue.EMPTY)], (f), 100000000 运行,-1 毫秒。

0

评论者:mfikes

2018年9月19日 6:12 PM 的 CLJS-2916.patch LGTM。

它通过了所有测试,包括 Canary 测试。根据之前的评论,性能看起来很好。

0

评论者:mfikes

将 CLJS-2916.patch 添加到 Patch Tender (i)

0
...