> On Jul 1, 2016, at 9:59 AM, Matthew Johnson via swift-evolution 
> <[email protected]> wrote:
> 
>> 
>> On Jun 30, 2016, at 12:26 PM, Dave Abrahams <[email protected]> wrote:
>> 
>> Q: Why not allow endIndex to have a different type from startIndex?
>> A: It appears to offer insufficient benefit for the associated
>>  complexity in typical usage.  A classic use case that argues for a
>>  different endIndex type is the null-terminated C string.  But you
>>  can't index one of those safely without actually counting the length,
>>  and once you've done that you can make the endIndex an Int.
> 
> It’s also worth nothing that we can use `Optional` with `nil` as the 
> `endIndex` sentinel if necessary.

I don’t believe this is true? Optional cannot support Equatable w/o generics 
changes. I believe we would need a different wrapper type.
>> The fact that Swift doesn't have a mutation model for classes, though,
>> means that mutating methods on a class constrained protocol can't be
>> labeled as such.  So consuming operations on a class-constrained
>> Iterator protocol would not be labeled as mutating.
>> 
>> The standard library team is currently trying to evaluate the tradeoffs
>> in this area.  One possibility under consideration is simply dropping
>> support for single-pass sequences until Swift can support move-only
>> value types and/or gets a mutation model for class instances.  It would
>> be very interesting to know about any real-world models of single-pass
>> sequences that people are using in Swift, since we don't supply any in
>> the standard library.
> 
> I’m happy to see you mention a mutation model for class instances!  (I don’t 
> mean to sidetrack the discussion, but would love to see that someday)
> 
> I don’t have any objection to dropping support for single-pass sequences 
> temporarily.  It’s possible that I would feel differently if I was making use 
> of them in my own code but I’m not.

I might see an issue if there were enough single-pass sequences that we worried 
about them trying to wedge themselves into Collection.

> In the meantime, people would be able to implement their own protocol for 
> single pass sequences.  What they would lose is for..in as well as the 
> standard library algorithms.  I’m not sure how many people this would impact 
> or how big the impact would be for them.  We have seen a couple of examples 
> in this discussion, but probably not enough to asses the overall impact.

I “feel” the model for Iterator as a separate possibly single-pass/infinite 
thing makes sense. But I also suspect unique requirements will come up for I/O 
use cases; who knows if some concurrency primitives might provide a better fit 
at that point in time?

-DW
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to