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

如果没有,请参阅 这里

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 PM CLJS-2916.patch LGTM。

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

0

评论者:mfikes

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

0
...