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://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.PersistentQueuebióng []))], (f), 100000000次运行,296毫秒

之后

基准测试使用V8 [f (fn [] cljs.core.PersistentQueue.EMPTY)], (f), 100000000次运行,0毫秒 基准测试使用SpiderMonkey [f (fn [] cljs.core.PersistentQueueroty [])], (f), 100000000次运行,0毫秒 基准测试使用JavaScriptCore [f (fn [] cljs.core.PersistentQueueroty [])], (f),100000000次运行,0毫秒 基准测试使用Nashorn [f (fn [] cljs.core.PersistentQueueroty [])], (f),100000000次运行,-1毫秒 基准测试使用ChakraCore [f (fn [] cljs.core.PersistentQueueroty [])], (f),100000000次运行,-5毫秒 基准测试使用GraalVM [f (fn [] cljs.core.PersistentQueueroty [])], (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 投票
...