[swift-evolution] [Pitch] Remove destructive consumption from Sequence
antonyzhilin at gmail.com
Mon Jun 27 15:14:28 CDT 2016
Dave Abrahams via swift-evolution <swift-evolution at ...> writes:
> I should be clear up-front about the main problem I'm trying to solve:
> Today, people see a beautiful, simple protocol (Sequence) to which
> things conform. They don't recognize that there's a semantic
> (assume you can make only a single-pass!) on it, so they write
> of functions that may make multiple passes over Sequences. They test
> their libraries with the most commonly-available Sequences, e.g.
> and Ranges, which happen to be multi-pass. Their tests pass! But
> constraints are wrong, their whole model of how to write generic code
> over sequences is wrong, and some of their code is wrong.
This is a mistake that I see more often than I want to: designers of
development tools underestimate abilities of developers, and end up
restricting many of them.
My point is that we should impose minimal requirements on custom data
types. Quoting yourself:
> In this case, protocols used to interface with the language
> at the lowest levels may be purely about syntax.
So there should be a protocol for building into for-in loops that
requires only that the sequence should be iterable once. Currently, we
have Sequence for that. If we remove destructive consumption from
Sequence, then there should be a super-protocol SinglePassSequence or
Forinable (excuse the pun).
But even if we do this, I still don't understand the intentions. If a
Sequence is multi-pass, then we can satisfy requirements of Collection,
as already noted in the discussion. Why should we keep Sequence at all,
then? Then let's remove it and rename SinglePassSequence to Sequence???
More information about the swift-evolution