评论者:mikera
丰富的见解——您是否使用基准来代表实际世界代码?
我同意,如果我们能避免调用点成为巨型形态是件好事,尽管我也相信,当考虑到已经存在的多种 IPersistentVector 类型(MapEntry、PersistentVector、SubVector以及任何库定义的 IPersistentVector 实例,如 clojure.core.rrb-vector)时,这方面的船可能已经远航。因此,JVM 通常无法证明特定的 IPersistentVector 接口调用是单态的,而这正是真正的大优化发生的时候。
在我接触的大部分实际代码中,相同大小/类型的向量被反复使用(例如:遍历映射条目,处理大小为N的向量序列),因此在这些情况下,我们应该能够依靠多态内联缓存来正确地进行。
一个0-4尺寸的单个 Tuple 类的想法很令人感兴趣,尽管我不禁想到,从性能的角度来看,这种方法的性能提升可能主要来自于大量代码执行类似(reduce conj (link: ) .....) 或其瞬态等价的操作,而这对于 Tuples 来说可能是特别糟糕的使用案例。我们可能有更好的方法来优化这些案例,而不是仅仅试图使 Tuples 更快……例如,在 Tuple0 上调用 asTransient() 可能可以直接切换到 PersistentVector 实现。