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已添加到补丁 Editors (i)

0

由:mfikes发表评论

CLJS-1866-updated.patch通过CI和Canary

0
...