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

Matthew Johnson matthew at anandabits.com
Tue Jun 28 14:42:42 CDT 2016

> On Jun 28, 2016, at 2:18 PM, Jonathan Hull via swift-evolution <swift-evolution at swift.org> wrote:
> One more question on this.
> How would we handle the opt-out safety for people who are intentionally trying to create an infinite loop?
> I don’t think we can make .until() safely lazy for iterators which have reference semantics and are destructive single-pass, so it has to be eager.  
> If .until() is eager, then .until(false) will fall into an infinite loop before the for-in loop is even run.  

This is an argument against a library solution if iterators have reference semantics.  Any solution that requires eager behavior is not a good solution.

> Maybe there just a way to plug an iterator/sequence directly in, and then silence the warning?  or we could do for-in-until…
I don’t think this should be a warning that can be silenced.  I think you are uncovering good reasons to go with a language supported solution.

This wouldn’t need to happen in Swift 3.  There have been other cases where we have adopted a “break it now in anticipation of making it better in the future” policy.  If we conclude that a language solution is warranted and can’t get it into Swift 3 that is ok IMO.  It is still possible to manually iterate infinite sequences.  This wouldn’t be that big a deal given that it is relatively infrequent.

> Thanks,
> Jon
>> On Jun 28, 2016, at 10:51 AM, Dave Abrahams <dabrahams at apple.com <mailto:dabrahams at apple.com>> wrote:
>>>> This is a reasonable structure, but there are important details missing.
>>>> 1. Presumably these are all for-in-able.  What makes something
>>>>  for-in-able?
>>> I would think the potentially infinite should require for-in-until
>>> (even if you explicitly set until to false to create an infinite
>>> loop), but collection would allow for-in (with optional until).  That
>>> way you have to acknowledge the possibility of an infinite
>>> sequence/iterator.
>> Are you proposing a new language feature?  We could also do this with
>>    for i in allIntegers.until(isPrime)
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160628/f3fd751a/attachment.html>

More information about the swift-evolution mailing list