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

Dave Abrahams dabrahams at apple.com
Thu Jun 30 17:37:16 CDT 2016


on Thu Jun 30 2016, Russ Bishop <xenadu-AT-gmail.com> wrote:

>> On Jun 30, 2016, at 10:26 AM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>>  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.
>> 
>> -- 
>> Dave
>
> I already gave an example of this earlier in the thread:

Yes, I remember that one.  It's not that I believe these things don't
exist at all; I'm trying to get a read on how important it is that they
fit into the standard library's protocol framework.  For that, I need to
know if they are very common.

>>> I use it in a LazyRowSequence<T: SqlModelConvertible> where
>>> querying Sqlite in WAL mode allows multiple concurrent readers to
>>> get point-in-time snapshots of the database. The query can’t be
>>> replayed without buffering all the rows in memory because Sqlite’s
>>> step functions are not bi-directional. In some cases we are talking
>>> about tens of thousands of rows (or even hundreds of thousands) and
>>> the ability to avoid buffering them is a feature, not a bug.
>
> IMHO the typical case for single-pass is IO. 

Yes.  Also, truly-random number generators.

> In this case it would work just as well as LazyRowIterator<T> assuming
> the language allows for-in on an iterator.

So, you're not interested in using algorithms like map and filter on
these things?

If it was just about for-in, we could say you can for-in over any
instance of

   ()->T? 

for example.

-- 
Dave


More information about the swift-evolution mailing list