[swift-evolution] Shouldn't ".withUnsafeBufferPointer" and ".withUnsafeMutableBufferPointer" be parts of protocols?
Dave Abrahams
dabrahams at apple.com
Sun Jan 29 02:46:52 CST 2017
on Sat Jan 28 2017, Brent Royal-Gordon <brent-AT-architechies.com> wrote:
>> On Jan 28, 2017, at 11:48 AM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>>
>> The way to handle Deque is to add this requirement to Collection when
>> we get the language features to express it:
>>
>
>> protocol Collection {
>>
>> associatedtype Segments : Collection
>> where Segments.Element : Collection,
>> Segments.Element.Element == Element
>> = EmptyCollection<EmptyCollection<Element>>
>>
>> var segments: Segments? {get}
>> ...
>> }
>>
>> extension Collection
>> where Segments == EmptyCollection<EmptyCollection<Element>> {
>> var segments: Segments? { return nil }
>> }
>
> Couldn't that be be expressed more accurately with `Never` if it were a subtype-of-all-types?
>
> protocol Collection {
>
> associatedtype Segments : Collection
> where Segments.Element : Collection,
> Segments.Element.Element == Element
> = Never
>
> var segments: Segments? {get}
> ...
> }
>
> extension Collection
> where Segments == Never {
> var segments: Segments? { return nil }
> }
Maybe, if we had the language feature, we could do that... but we don't.
> Or you could say that there is always at least *one* segment:
>
> protocol Collection {
>
> associatedtype Segments : Collection
> where Segments.Element : Collection,
> Segments.Element.Element == Element
> = CollectionOfOne<Self>
>
> var segments: Segments {get}
> ...
> }
>
> extension Collection
> where Segments == CollectionOfOne<Self> {
> var segments: Segments { return CollectionOfOne(self) }
> }
That's not actually helpful, because segmented algorithms need to be
able to use the presence of segments to stop recursing :-)
--
-Dave
More information about the swift-evolution
mailing list