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。

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

0

评论者:mfikes

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

0
...