> On Jan 2, 2016, at 23:53, Dave Abrahams via swift-evolution 
> <[email protected]> wrote:
> 
>> 
>> On Jan 2, 2016, at 11:26 PM, Kevin Ballard via swift-evolution 
>> <[email protected]> wrote:
>> 
>> On Sat, Jan 2, 2016, at 11:17 PM, Brent Royal-Gordon wrote:
>>>> `buffered` is no more problematic than `lazy` is. In fact, calling 
>>>> `buffered` actually doesn't have any side-effects at all (it can avoid 
>>>> fetching the first element until you call `first` on the result of 
>>>> `buffered`).
>>> 
>>> If `seq` is a single-pass sequence, then `seq.buffered.first` will consume 
>>> an element from `seq`, even though you only accessed two properties. That's 
>>> why I call it problematic.
>>> 
>>> (If calling `buffered` somehow rendered the original sequence unusable—for 
>>> instance, if we had some way to express that the `BufferedSequence` takes 
>>> unique ownership of its base—this wouldn't bother me as much.)
>> 
>> If `sequence` is a single-pass sequence, wrapping it in any other sequence 
>> type and then doing anything with that other sequence type makes the 
>> original sequence unusable (or rather, you can still use it but the elements 
>> yielded from any further access to the original sequence can be completely 
>> arbitrary).
>> 
>> And for the record we already have precedent for the specific case of 
>> `seq.prop1.prop2` destructively consuming the original sequence: 
>> `seq.lazy.array`.
> 
> Yes, and there are arguments for dropping “.array” as a property.  The 
> convention is that “conversions” (ill-defined, I know) use constructor 
> syntax, and we are currently heading towards the elimination of "convenience” 
> interfaces that duplicate functionality, so we might end up with Array(seq).  
> 
> All that said, single-pass Sequences are just weird in that they get mutated 
> without calling any mutating methods on them; you mutate them by calling a 
> mutating method on a separate generator instance.  In other words, they 
> fundamentally have reference semantics. There may be some better way to 
> address this whole area, but we’ll have to go much deeper than merely poking 
> at the question of a `.first` property. 

Should "generate()" be a mutating method on SequenceType, then? And a 
non-mutating one on CollectionType, obviously.

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

Reply via email to