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.是免费的。

基准测试: 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日19:12 PM CLJS-2916.patch LGTM。

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

0 投票

评论:mfikes

CLJS-2916.patch已添加到补丁Tender(i)中。

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