[swift-evolution] [swift-evolution-announce] [Review] SE-0120: Revise 'partition' Method Signature

Dave Abrahams dabrahams at apple.com
Tue Jul 12 19:27:43 CDT 2016

on Tue Jul 12 2016, Paul Cantrell <swift-evolution at swift.org> wrote:

> The proposal is clearly an improvement over the status quo.
> A naming concern, which I apologize for not getting in before the review period:
> In Ruby (and I think some other languages as well), “partition”
> returns two collections, one with the included elements and one with
> the excluded. That’s a useful flavor of the method to have. I’ve added
> it in an extension myself in a project or two.
> Does this proposal leave room for the two-collection variant if we
> want to add it later?


  let p = x.partition { ... }
  excluded = x[x.startIndex..<p]
  included = x[p..<x.endIndex]

> If it were to honor the existing term of art, the natural name for it would be “partitioned(by:)”:
>     mutating func partitioned(by: …) -> ([Self.Iterator.Element], [Self.Iterator.Element])

Yes, we are interested in more algorithms,
but they are out-of-scope for Swift 3.  

> However, naming the in-place reordering method “partition” as this
> proposal does would suggest instead that “partitioned(by:)” is instead
> its non-mutating counterpart:
>     mutating func partitioned(by: …) -> ([Self.Iterator.Element], Index)

Yes a non-mutating one.  The above might return.
a pair of ArraySlice, with some way to retrieve the underlying Array.

> Overloading on return type is dicey business, especially when the type
> resolver has to peer inside a tuple. Could these two flavors coexist
> peacefully? Will this be confusing? Are we painting ourselves into a
> corner?

I don't see any such overloading here.

> Cheers,
> Paul
>> On Jul 12, 2016, at 1:12 PM, Chris Lattner <clattner at apple.com> wrote:
>> Hello Swift community,
>> The review of "SE-0120: Revise ‘partition' Method Signature" begins now and runs through July 19. The proposal is available here:
>> 	https://github.com/apple/swift-evolution/blob/master/proposals/0120-revise-partition-method.md
>> Reviews are an important part of the Swift evolution process. All reviews should be sent to the swift-evolution mailing list at
>> 	https://lists.swift.org/mailman/listinfo/swift-evolution
>> or, if you would like to keep your feedback private, directly to the review manager.
>> What goes into a review?
>> The goal of the review process is to improve the proposal under
>> review through constructive criticism and contribute to the
>> direction of Swift. When writing your review, here are some
>> questions you might want to answer in your review:
>> 	* What is your evaluation of the proposal?
>> 	* Is the problem being addressed significant enough to warrant a change to Swift?
>> 	* Does this proposal fit well with the feel and direction of Swift?
>> 	* If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?
>> 	* How much effort did you put into your review? A glance, a quick reading, or an in-depth study?
>> More information about the Swift evolution process is available at
>> 	https://github.com/apple/swift-evolution/blob/master/process.md
>> Thank you,
>> -Chris Lattner
>> Review Manager
>> _______________________________________________
>> swift-evolution-announce mailing list
>> swift-evolution-announce at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution-announce
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution


More information about the swift-evolution mailing list