> On Jun 22, 2016, at 2:57 PM, Dave Abrahams via swift-evolution
> <[email protected]> wrote:
>
> <Ahem> “Iterators,” please.
That makes me happy - for some reason I thought it was still GeneratorProtocol
>> destructively, but such Generators would not conform to the needs of
>> Sequence. As such, the most significant impact would be the inability
>> to use such Generators in a for..in loop,
>
> Trying to evaluate this statement, it's clear we're missing lots of
> detail here:
>
> * Would you remove Sequence?
> * If so, what Protocol would embody “for...in-able?”
No, I would just remove the allowance in the documentation and API design for a
destructive/consuming iteration. Sequence would be the interface to getting
access to repeatable iteration, without the need for meeting the other
requirements for Collection.
Sequence would be what java would refer to as Iterable, C# refers to as
IEnumerable<>, but perhaps it is closest to the Enumerable mixin module in Ruby
in terms of default utility methods supplied based on an implementation of
‘each’ (forEach() in Swift). Sequence is for…in-able because Sequence defined
makeIterator(). The only difference is that subsequent calls to makeIterator()
are expected to return conceptually equivalent elements in the same order.
> * If not, would you remove Collection?
I see value in the other differentiating factors between Collection (not
needing to be indexable, not needing to return a definitive count, and possibly
not needing to be finite - although it sounds like collections may be
effectively infinite to the extent that the integer type returned from count
allows.
A Fibonacci-providing sequence can be written as a rather small closure, while
my understanding of Collection would require either more code (that I likely
don’t need), rather funky indexes that preserve state internally, and/or a
switch to a non-iterative algorithm.
> * What role would Iterator play?
So far I haven’t considered whether IteratorProtocol would be destructive,
since my motivation was primarily around consistent Sequence behavior. By that
light, an Iterator returned by a method other than Sequence.makeIterator()
could still consume data. However, I wonder if supporting such Iterators
provides enough value to be worthwhile - there aren’t that many methods that
consume an IteratorProtocol (the AnyIterator<> initializer is the only one I
know of) and without applicability to a Sequence such an iterator has less
value.
-DW
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution