> On 27 Jun 2016, at 04:56, Jonathan Hull via swift-evolution 
> <[email protected]> wrote:
> 
> Can’t a Sequence be potentially infinite, whereas a collection has a defined 
> count/endIndex?  Other than that, I agree with your statement.
> 
> Here is what I see as the appropriate structure:
> 
> Iterator: Single destructive pass, potentially infinite, (should be for-in 
> able)
> Sequence: Guaranteed non-destructive multi-pass (vends Iterators), 
> potentially infinite, (should be subscript-able, gain most of collection, but 
> lose anything that relies on it ending)
> Collection: Multi-pass, guaranteed finite, (no changes from current form, 
> except extra inits from Iterator/Sequence with end conditions)
> 
> Right now we are allowed to have an infinite sequence, but calling dropLast 
> or non-lazy map will cause an infinite loop.  These cases could be made much 
> safer by considering the potentially infinite and finite cases separately...

This seems pretty reasonable to me, though I'm not sure about subscripting 
Sequence, I mean you can always add that yourself to sequence types where it 
makes sense to them that way, but otherwise I think it's best to just keep it 
simple and leave Sequences as a type that vends iterators over the same values.

Some methods of sequence may need to be moved to iterators though, but in 
mutating form; things like .dropFirst() to skip elements, .first(where:) for 
skipping to a matching element and so-on. Iterator should probably also have 
the .underestimatedCount property so they can give a useful value if it can be 
known.

But yeah, I think the basic structure of this makes sense, as the potentially 
destructive nature of sequences doesn't seem that well known in my experience, 
and I often have to go back and check my code to be sure I've avoid possible 
destructive usage; I've never thought of trying to use iterators instead, might 
try changing some methods and see how that goes.
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to