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

评论由: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.0免费。

基准测试: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

CLJS-2916.patch of 19/Sep/18 6:12 PM LGTM。

所有测试均通过,包括Canary测试。考虑到之前的评论,性能看起来良好。

0

评论由:mfikes

CLJS-2916.patch已添加至补丁库(i)

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