评论者为:alexmiller
我想说的是,这是我第一次记得查看这个工单,因为它基本上在我参与Clojure核心之前。我知道已经过去很多年了,我正在努力真诚地思考这个问题。但我在重新审视你的路径时可能会问些愚蠢的问题。
我在这一点上与使优良的集合特性能够被Clojure核心内外部的impl使用完全同意。
关于更改协议的可行性,我认为你可能误解了我的意图。我们当然可以更改或扩展协议,但我们只需以扩展(保留现有内容)而不是破坏(通过更改现有方法签名)的方式进行。我反对的是更改Sorted.seqFrom()的签名,因为这会破坏所有现有的实现 - 这根本不可行。但是,将Sorted扩展到Sorted2(或任何更有意义的名称)并添加新的seqFrom权重新完全没问题。子序列代码可以在集合并排序为Sorted2的情况下执行最佳操作,如果只是Sorted,则回退到其他操作。有多种方法可以实现这一点,但希望你能理解意图 - 持续工作而不更改现有内容,当可用时利用新内容。
追溯一下,seqFrom及其朋友似乎不足以涵盖可能在不同数据结构中期望的所有事物。我仍然认为NavigableSet有很多好的先前思考(不说是直接答案,但真的是同一个问题领域),并且广泛研究近年来添加的其他数据结构可能会很有益处。
实际上,子序列实现非常糟糕,依赖于很多移动部件和假设。也许整个子序列操作应该直接由集合并排序执行。