[swift-evolution] [Pitch] Remove destructive consumption from Sequence

Matthew Johnson matthew at anandabits.com
Fri Jul 1 10:59:35 CDT 2016


> On Jun 30, 2016, at 5:39 PM, Dave Abrahams <dabrahams at apple.com> wrote:
> 
> 
> on Thu Jun 30 2016, Haravikk <swift-evolution-AT-haravikk.me> wrote:
> 
>>> On 30 Jun 2016, at 18:26, Dave Abrahams <dabrahams at apple.com> wrote:
>>> 
>>> Q: Why should there be indices on an infinite multipass sequence?  
>>> A: Because the operations on indices apply equally well whether the
>>>  sequence is finite or not.  Find the index of a value in the
>>>  sequence, slice the sequence, find again, etc.
>> 
>> Would it not make more sense for sequences that can benefit from
>> subscripts to just conform to Indexable? 
> 
> All multi-pass sequences can benefit from subscripts.
> 
>> It seems like having basically all of the Collection-specific methods
>> on Sequence too would be confusing, and dilute any nothing that these
>> are sequences where elements are supposed to be consumed in-order, as
>> it would give the illusion that you can skip around with the
>> convenience of an array.
> 
> If traversal consumes the sequence, it is a single-pass thing.

It’s also worth noting that Collection does not imply the ability to skip around “with the convenience of an array” if that means skipping around in constant time.  You need RandomAccessCollection to get that guarantee.

> 
>> There's also the issue of how you would even index something that's
>> potentially infinite; you'd need to use a big integer in which case
>> you could end up with your indices growing to infinite size over time?
> 
> It's trivial; the index contains the iteration state.  The only
> fundamental difference between the constraints on Iterator and the
> constraints on an Index is that Iterator doesn't support comparison for
> equality.

Not just equality, but also general `Comparable` (you’re not considering changing that are you?).

> 
> -- 
> Dave



More information about the swift-evolution mailing list