[swift-evolution] [Pitch] Removing the empty initialiser requirement from RangeReplaceableCollection

Karl razielim at gmail.com
Sat Jul 9 13:44:30 CDT 2016


> On 8 Jul 2016, at 03:18, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
> on Thu Jul 07 2016, Haravikk <swift-evolution at swift.org> wrote:
> 
>>> On 7 Jul 2016, at 15:57, Karl via swift-evolution <swift-evolution at swift.org> wrote:
>>> 
>>> I believe the idea of RRC is that all you need to implement is the
>>> empty initialiser and replaceSubrange(), and everything else
>>> (e.g. Append, insert) is implemented in terms of those. Even the
>> 
>>> initialiser which takes existing collection just initialises and
>>> empty one and appends the existing collection (I.e. Calling
>>> replaceSubrange).
>>> 
>>> If I understand you correctly, it will not be possible to initialise
>>> a generic RRC any more, will it? Because that RRC may need
>>> additional information (e.g. A maximum buffer size if it stores its
>>> data in multiple discrete buffers) which you can’t provide
>>> generically.
>>> 
>>> Maybe we could have a true copy-constructor instead? That is,
>>> replace init<C:Collection>(_:) with init(_: Self), so that it could
>>> take any additional arguments from that other instance?
>> 
>> A copying initialiser could work, but it should probably have a
>> parameter for the type of copy to create (empty, shallow copy and deep
>> copy for example), as I suspect it's the empty copy that
>> RangeReplaceableCollection needs more than anything. Otherwise it
>> shouldn't need initialisers on the protocol. This however is something
>> that could (and should) be moved out into its own protocol I think,
>> with RangeReplaceableCollection simply conforming that.
> 
> Maybe RRC should have:
> 
>      func emptyCopy() -> Self
> 
> ?
> -- 
> Dave
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution


Perhaps we should have a shallow-copy protocol for Collections in general? 

I was using the initialiser to create a copy, but that’s not really anything to do with a “range-replaceable collection” and there may be non-RRCs which you want to take shallow copies of for similar composition guarantees.

Karl



More information about the swift-evolution mailing list