评论由:tonsky发表
bq. 但随着时间的推移,从多个线程使用需要适当的常数公布。
这是否意味着在变换器中不能使用任何瞬态(因为瞬态实现所基于的底层数组是原地修改的,所以不同的线程可能会看到瞬态对象的不同状态)?
这是否也意味着 {{partition-by}} 和 {{partition-all}} 应该修复(它们使用 {{java.util.ArrayList}},由于是引用数组,没有常数公布的语义)?
bq. 瞬态集不能原地修改 - 您必须使用返回值。
我考虑了一下,{{clojure/core.clj}} 和 {{clojure.lang.ATransientSet.java}} 都是 Clojure 内部的一部分,位于同一位置,所以可以稍微共享一些彼此的内知道。这似乎是安全的,因为这些知识不会外漏,并且如果在某个时候 ATransientSet 的实现会发生变化,core.clj 可以在同一个版本中相应更新。当然,我不会在第三方库中这样做。