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

嗨,Mike,

今天早上我已经完成了这项工作,并在我的电子邮件中收到了确认。

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

嗨,Mike,

我已经更新了所附补丁。

当你运行'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的 CLJS-2916.patch LGTM。

它通过了所有测试,包括 Canary 测试。鉴于前一条评论,性能看起来很好。

0

评论者:mfikes

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

0
...