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

欢迎!请查看关于页面了解如何使用本站。

0
core.rrb-vector

我在玩 aoc2018 d9 时遇到了这个错误。看起来当向量中的项目数量超过 200 万时,这个错误就会出现。

Execution error (ArrayIndexOutOfBoundsException) at clojure.core.rrb-vector.rrbt/slice-left$fn (rrbt.clj:393).
Index 33 out of bounds for length 33

      rrbt.clj:  393  clojure.core.rrb-vector.rrbt/slice-left/fn
      rrbt.clj:  392  clojure.core.rrb-vector.rrbt/slice-left
      rrbt.clj:  375  clojure.core.rrb-vector.rrbt/slice-left
      rrbt.clj: 1098  clojure.core.rrb-vector.rrbt.Vector/slicev
rrb_vector.clj:   83  clojure.core.rrb-vector/subvec
rrb_vector.clj:   73  clojure.core.rrb-vector/subvec

我找不到 GitHub 上的问题页面,所以我想在这里留个问题请求帮助。

2 个答案

+1

被选中
 
最佳答案

您使用 core.rrb-vector 的哪个版本?一些在最新版本之前已修复的 bug。最新版本可以在本地的 README 中的“已发布版本”链接找到:https://github.com/clojure/core.rrb-vector/

如果您能使用最新版本重现此问题,我会很高兴了解如何做到。此库中至少还有一个已知的 bug 我不确定如何修复,但如果有我没有看到的其他 bug,我也不会感到惊讶。

哇,非常感谢您的回答。我实际上正在使用最新版本 0.1.2。如果您想让我尝试之前的版本,我很乐意这么做。目前,我只能用下面的代码复现问题。对不起,我的代码很差劲 ;)

您可以在注释块中的第 94 行复现该问题,虽然它需要一些时间来运行。 https://github.com/mattdamon108/first-clojure/blob/master/aoc201809.clj
我认为最新版本中的错误最少,因此不建议尝试旧版本。我能在我的系统上复现这个错误。当我阅读您的代码时,我有点儿好笑,因为针对 core.rrb-vector 的早期错误报告之一也是关于弹珠游戏,可能有人正在编写代码以解决这个相同的 2018 年 Advent of Code 问题 #9,这似乎是您正在解决的问题。那个较早的错误已被修复,但您似乎揭露了另一个我尚未见过的错误。

坦白说,我对能否想出一种方法使 core.rrb-vector 即 (a) 是正确的,(b) 又能满足 RRB 树声明的运行时间有点怀疑。

我有一个基于 B 树而不是 RRB 树编写类似库的想法,但这是一个我花费很多时间去思考和撰写的想法,但我还没有编写代码,所以这种方法对您可能没有帮助,除非您喜欢编写这样的库。

同时,有一个包含 io.lacuna.bifurcan.List 类的 Java 库,它可能比 core.rrb-vector 少一些错误,但对此没有保证: https://github.com/lacuna/bifurcan
首先,我很高兴知道我遇到了这个错误,因为我错误的使用了这个库,并且很高兴能报告一个未发现的错误。

我希望这个问题能很快得到解决。我真的很想无后顾之忧地使用这个库。实际上,我对计算性能非常满意。

感谢您让我知道另一个库 io.lacuna.bifurcan.List。我会尝试它的。

再次感谢您的贡献!
+1

仅供参考,这是提问的正确地方,如有必要,我们将向内部Jira系统提交问题。

感谢您的信息!
...