2024 年 Clojure 状况调查中分享您的观点!

欢迎来到!请访问关于页面获取更多关于如何使用本网站的详细信息。

0
core.async
在 cljs 中,clojure.core.async/random-array 的 shuffle 功能是错误的,导致它总是为 arg n=2 返回 \[1 0\]。这打破了 alts! 在操作选择方面非确定性的承诺,因为它总是尝试先使用第二个元素。此外,对于大小为 N>1 的任何 alts!,第一个操作永远不会首先被选中。

请使用 goog.array.shuffle 来进行打乱(此 API 也被 cljs.core/shuffle 使用)。

新的实现通过测试并表现更好

{code:java}

cljs.user=> (frequencies (take 10000 (map vec (repeatedly #(a/random-array 2)))))
警告:变量 cljs.core.async/random-array 在第 1 行不公开 <cljs repl>
{[0 1] 4964, [1 0] 5036}

cljs.user=> (frequencies (take 10000 (map vec (repeatedly #(clojure.core.async/random-array 3)))))
警告:变量 cljs.core.async/random-array 在第 1 行不公开 <cljs repl>
{[0 1 2] 1720, [1 2 0] 1679, [2 0 1] 1669, [0 2 1] 1573, [1 0 2] 1682, [2 1 0] 1677}
cljs.user=> (pp)
{[0 1 2] 1720,
 [1 2 0] 1679,
 [2 0 1] 1669,
 [0 2 1] 1573,
 [1 0 2] 1682,
 [2 1 0] 1677}
nil

3 个答案

0

评论者:mfikes

ASYNC-227.patch LGTM (y)

0

评论者:gshayban

在 14bed8383516ab119c3fc51c2882112000eb5664 中修复,版本 0.4.500

0
by
参考资料: https://clojure.atlassian.net/browse/ASYNC-227 (由gshayban报告)
...