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

欢迎!请查看关于页面,了解更多本站如何运作的信息。

+1
ClojureScript

如果你的代码中有 1. },生成的代码是

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

当它应该生成 empty vector 的情况时,应该是

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吗?我没有在这里看到您的名字。

如果没有,请参见这里

0

评论者:colinkahn

迈克:

今早刚完成,我的电子邮件里已经收到了确认。

0

评论者:mfikes

太好了,我将检查这个补丁。

0

评论者:mfikes

嗨Colin,

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

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

关于真正测试补丁,我能想到的唯一方法是检查生成的代码。看

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

这似乎有点像hack,但你可以检查产生的字符串是否包含{{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}}方法。比我之前的字符串hack聪明得多。 :)

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 获得好评。

它通过了所有测试,包括 Canary 测试。考虑到之前的评论,性能看起来不错。

0

评论者:mfikes

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

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