[swift-evolution] [swift-evolution-announce] [Review] SE-0172: One-sided Ranges

Matt Lewin matt at lewin.us
Tue Apr 18 09:29:43 CDT 2017

Proposal Link:
https://github.com/apple/swift-evolution/blob/master/proposals/0172-one-sided-ranges.md <https://github.com/apple/swift-evolution/blob/master/proposals/0172-one-sided-ranges.md>

My reply:
Long-time reader, first time commenter.

I agree the need exists to slice up collections as described in the proposal. I also agree that Swift 3’s solution to this is jarring.

Given the example in the proposal:
let s = "Hello, World!"
let i = s.index(where: ",")
let greeting = s[s.startIndex..<i]
I agree that “s.startIndex” is tiresome to write. I question, though, whether it is harmful to readability.

In contrast, the proposed solution of 
// half-open right-handed range
let greeting = s[..<i]
// closed right-handed range
let withComma = s[...i]
// left-handed range (no need for half-open variant)
let location = s[i...]
requires both the code-writer and the code-reader to infer the missing side is the start or end.

From my perspective, this obfuscates the language by reducing the ability of the code to be read as English. (One of the goals of Swift design, correct?)

As an old Perl and Python hacker, the one-sided slicing example from Python, to me, is the perfect example of how those languages obfuscate in the name of brevity. Don’t get me wrong, I never had an issue with any of that when coding in those languages. The beauty of Swift, though, is that it can generally be read by the unindoctrinated.

Unfortunately, I don’t have a palatable alternative syntax solution. Honestly, I would go with s[s.startIndex..<i] for readability purposes.

I suppose we could do something similar to oldValue and newValue in getters and setters. (e.g., s[start..<i], s[i..<end] or s[first..<i], s[i..<last]) While such a thing still requires the layman to pause to consider where those pseudo-constants came from, because they are explicit they are at least somewhat intuitive.

Thanks for your consideration.


> On Apr 18, 2017, at 12:40 AM, Douglas Gregor <dgregor at apple.com> wrote:
> Hello Swift community,
> The review of SE-0172 "One-sided Ranges" begins now and runs through April 23, 2017. The proposal is available here:
> https://github.com/apple/swift-evolution/blob/master/proposals/0172-one-sided-ranges.md <https://github.com/apple/swift-evolution/blob/master/proposals/0172-one-sided-ranges.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 <https://lists.swift.org/mailman/listinfo/swift-evolution>
> or, if you would like to keep your feedback private, directly to the review manager. When replying, please try to keep the proposal link at the top of the message:
> Proposal link:
> https://github.com/apple/swift-evolution/blob/master/proposals/0172-one-sided-ranges.md <https://github.com/apple/swift-evolution/blob/master/proposals/0172-one-sided-ranges.md>
> Reply text
> Other replies
>  <https://github.com/apple/swift-evolution/pulls#what-goes-into-a-review-1>What goes into a review?
> The goal of the review process is to improve the proposal under review through constructive criticism and, eventually, determine 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 <https://github.com/apple/swift-evolution/blob/master/process.md>
> Thank you,
> -Doug
> Review Manager
> _______________________________________________
> swift-evolution-announce mailing list
> swift-evolution-announce at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution-announce

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170418/bfa7ab00/attachment.html>

More information about the swift-evolution mailing list