2024 Clojure 状态调查! 中分享您的看法。

欢迎!请在 关于 页面查看更多关于此工作的信息。

+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
by

评论者:mfikes

太好了,我将审查补丁。

0
by

评论者:mfikes

嘿,Colin,

对于你的第二个测试,你可能想检查这个?

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

在实际上测试补丁方面,我能想到的唯一一件事是检查生成的代码。查看

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

似乎有点像黑客式的方法,但你可以在生成的字符串中检查是否含有 {{PersistentVector}},如果是,那么失败测试。

0
by

评论者:colinkahn

是的,肯定想检查类型。奇怪的是,我在测试报告中没有收到失败。我想知道是否有办法只运行测试子集?

你认为使用 with-redefs 如何?

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

0
by

评论者:mfikes

嗨,Colin,

我不知道是否有办法只运行测试子集。按所周知,Travis CI 会失败构建 https://travis-ci.org/mfikes/clojurescript/builds/430674720

我肯定喜欢你的 {{with-redefs}} 方法。比我字符串黑客式的方法更聪明。 :)

0
by

评论者:colinkahn

迈克,您好

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

当你运行 'lein test' 时,那些测试实际上并不会被执行,看起来 Travis 会进行构建并使用 jsc 运行它们。我在本地进行了复制,不确定是否有命令可以使其变得更简单。

0
by

评论者: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的CLJS-2916.patch LGTM。

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

0

评论者:mfikes

将CLJS-2916.patch添加到补丁温和(i)

0
...