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 CI 在使用 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毫秒

之后

基准测试使用V8 [f (fn [] cljs.core.PersistentQueue.EMPTY)], (f),100000000次运行,0毫秒

0

评论者:mfikes

2018/9/19 6:12 PM CLJS-2916.patch LGTM。

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

0

评论者:mfikes

CLJS-2916.patch已添加到补丁Temper。

0
...