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,

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

(持久队列 #queue [1 2 3])

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

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

似乎有点像恶作剧,但你可以检查生成的字符串是否包含 {{PersistentVector}},如果是,则测试失败。

0投票

评论者:colinkahn

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

您对使用 with-redefs 有什么看法?

`(with-redefs [into (fn [& _] (throw (ex-info "Efficiently 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/PersistentQueueEMPTY)],(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投票
...