2024 年 Clojure 状态调查!中分享您的想法。

欢迎!请参阅关于页面以获取更多关于如何使用本页面的信息。

0
ClojureScript

附件补丁简化并加速了 RangedIterator。

以下函数被用作基准测试来测试矢量迭代:

`
(defn consume-iterator
[v]
(let [iter (-iterator v)]

(loop []
  (when (.hasNext iter)
    (.next iter)
    (recur)))))

`

如下设置了 "simple-benchmarks" 系列:

(simple-benchmark [v (into [] (range N))] (consume-iterator v) I)

其中 'N' 和 'I' 是下表中 'Vector Size' 和 'Iterations' 列的值。

|矢量大小|迭代次数|V8 速度 (链接:毫秒) (master)|V8 速度 (链接:毫秒) (补丁)|JSC 速度 (链接:毫秒) (master)|JSC 速度 (链接:毫秒) (补丁)|
| :-- | :-- | :-- | :-- | :-- | :-- | :-- |
|1|100,000|15|11|13|7|
|2|100,000|14|10|7|4|
|4|100,000|18|10|9|5|
|8|100,000|27|12|14|6|
|16|100,000|43|17|19|9|
|32|100,000|74|24|37|15|
|100|100,000|217|59|105|45|
|1000|100,000|2008|524|1032|392|
|10,000|100,000|20390|5856|10249|4178|
|100,000|10,000|20334|5324|10324|4387|

使用的 JavaScript 引擎版本
V8 版本 5.1.281.47
JSC 版本未知

将 RangedIterator 构造函数 ranged-iterator 也设为私有。

7 答案

0

由 dnolen 发表的评论

首先不要修改构造函数,让我们得到一个带性能改进的补丁。谢谢。

0

由 tmulvaney 发表的评论

已重新合并,构造函数现在不再是私有的。

0

由 dnolen 发表的评论

对不起,没有讲清楚。即使我们现在没有使用它们,也不要改变 deftype 的字段。我们想要带上性能增强,同时完全不要改变 API。

0

由 tmulvaney 发表的评论

谢谢,这很有道理。已在此次补丁中修复。

0

评论者:mfikes

将CLJS-1866-updated.patch添加到补丁摊位(i)

0

评论者:mfikes

CLJS-1866-updated.patch通过CI和Canary测试(/)

0
参考:https://clojure.atlassian.net/browse/CLJS-1866(由tmulvaney报告)
...