> on Wed Jul 06 2016, Tim Vermeulen<[email protected]>wrote: > > > This is a follow up from this swift-users thread: > > https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20160704/002489.html > > > > As it stands, RangeReplaceableCollection requires an implementation > > for init(), which is used in the default implementations of (as far as > > I can tell) init(_:), init(repeating:count:) and > > removeAll(keepingCapacity:). The latter of these methods should be > > implementable with removeSubrange(_:) instead. > You can't implement `removeAll(keepingCapacity: false)` with > `removeSubrange(_:)`. How do you propose to provide the other default > implementations?
You’re right, I didn’t think that through properly. My first thought was a copy constructor for collections in general, but as you pointed out, this wouldn’t be efficient for this purpose. An “empty copy constructor” would be better, which could be either a static method, an instance method, a computed property or an initialiser. I’d probably opt for the computed property (it will always run in O(1) anyways, I think), but it doesn’t really matter. > > I would like to propose to *remove* all three initialisers from this > > protocol, because it makes it impossible for some collections to > > conform to it that need extra data for its initialisation, but are > > otherwise perfectly capable of having arbitrary subranges replaced by > > elements from another collection. > I agree with the goal, but I'd like to see an implementation before I > agree that it's acheivable. > > > Those three initialisers could > > either move to a new protocol or simply not be part of any protocol. > > > > > > On a similar note, I’d like to have all initialisers of SetAlgebra removed > > as well, but that might need its own review. > > _______________________________________________ > > swift-evolution mailing list > > [email protected] > > https://lists.swift.org/mailman/listinfo/swift-evolution > -- > Dave > > > > _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
