<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jan 22, 2017 at 6:40 PM, Chris Lattner via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
&gt; On Jan 20, 2017, at 9:39 PM, Brent Royal-Gordon via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt; On Jan 20, 2017, at 2:45 PM, Dave Abrahams via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; on Fri Jan 20 2017, Joe Groff &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; Jordan points out that the generalized slicing syntax stomps on &#39;...x&#39;<br>
&gt;&gt;&gt; and &#39;x...&#39;, which would be somewhat obvious candidates for variadic<br>
&gt;&gt;&gt; splatting if that ever becomes a thing. Now, variadics are a much more<br>
&gt;&gt;&gt; esoteric feature and slicing is much more important to day-to-day<br>
&gt;&gt;&gt; programming, so this isn&#39;t the end of the world IMO, but it is<br>
&gt;&gt;&gt; something we&#39;d be giving up.<br>
&gt;&gt;<br>
&gt;&gt; Good point, Jordan.<br>
&gt;<br>
&gt; In my experiments with introducing one-sided operators in Swift 3, I was not able to find a case where you actually wanted to write `c[i...]`. Everything I tried needed to use `c[i..&lt;]` instead. My conclusion was that there was no possible use for postfix `...`; after all, `c[i...]` means `c[i...c.endIndex]`, which means `c[i..&lt;c.index(after: c.endIndex)]`, which violates a precondition on `index(after:)`.<br>
<br>
</span>Right, the only sensible semantics for a one sided range with an open end point is that it goes to the end of the collection.  I see a few different potential colors to paint this bikeshed with, all of which would have the semantics “c[i..&lt;c.endIndex]”:<br>
<br>
1) Provide &quot;c[i...]&quot;:<br>
2) Provide &quot;c[i..&lt;]&quot;:<br>
3) Provide both &quot;c[i..&lt;]” and &quot;c[i…]&quot;:<br>
<br>
Since all of these operations would have the same behavior, it comes down to subjective questions:<br>
<br>
a) Do we want redundancy?  IMO, no, which is why #3 is not very desirable.<br>
b) Which is easier to explain to people?  As you say, &quot;i..&lt; is shorthand for i..&lt;endindex” is nice and simple, which leans towards #2.<br>
c) Which is subjectively nicer looking?  IMO, #1 is much nicer typographically.  The ..&lt; formulation looks like symbol soup, particularly because most folks would not put a space before ].<br>
<br>
There is no obvious winner, but to me, I tend to prefer #1.  What do other folks think?<br></blockquote><div><br></div><div>I strongly prefer “c[i...]”</div><div><br></div><div>Nevin</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class=""><br>
&gt; If that&#39;s the case, you can reserve postfix `...` for future variadics features, while using prefix `...` for these one-sided ranges.<br>
<br>
</span>I’m personally not very worried about this, the feature doesn’t exist yet and there are lots of ways to spell it.  This is something that could and probably should deserve a more explicit/heavy syntax for clarity.<br>
<br>
-Chris<br>
<div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br>
</div></div></blockquote></div><br></div></div>