<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Apr 25, 2016 at 8:25 PM, Dave Abrahams <span dir="ltr">&lt;<a href="mailto:dabrahams@apple.com" target="_blank">dabrahams@apple.com</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>
on Mon Apr 25 2016, Xiaodi Wu &lt;<a href="http://xiaodi.wu-AT-gmail.com" rel="noreferrer" target="_blank">xiaodi.wu-AT-gmail.com</a>&gt; wrote:<br>
<br>
&gt; On Mon, Apr 25, 2016 at 6:15 PM, Dave Abrahams &lt;<a href="mailto:dabrahams@apple.com">dabrahams@apple.com</a>&gt; wrote:<br>
&gt;<br>
&gt;     on Mon Apr 25 2016, Xiaodi Wu &lt;<a href="http://xiaodi.wu-AT-gmail.com" rel="noreferrer" target="_blank">xiaodi.wu-AT-gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;     &gt; Quick thought:<br>
&gt;     &gt;<br>
&gt;     &gt; Why are you reaching for the &quot;form...&quot; rule for the mutating methods when<br>
&gt;     there<br>
&gt;     &gt; are clear verb counterparts?<br>
&gt;     &gt; location: locate<br>
&gt;     &gt; successor: succeed<br>
&gt;<br>
&gt;     We&#39;re not using successor(i) anymore, as noted below, and furthermore<br>
&gt;     c.succeed(&amp;i) strongly implies the wrong meaning.<br>
&gt;<br>
&gt; I thought that&#39;s what I understood from the email, but in the linked proposal<br>
&gt; they&#39;re still there (as are the many types of Range protocols). Wrong link, or<br>
&gt; just not updated?<br>
<br>
</span>My mistake; I pushed to the wrong repo.  Please try again.<br></blockquote><div><br></div><div>I see a new version, but I still see .successor().</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;     I didn&#39;t consider<br>
&gt;     using<br>
&gt;<br>
&gt;     c. locate(...:&amp;i ... )<br>
&gt;<br>
&gt;     primarily because I never thought of it and nobody suggested it IIRC,<br>
&gt;     but I also don&#39;t see how it would work in a family with<br>
&gt;     c.location(after: i) et al. Suggestions?<br>
&gt;<br>
&gt; I didn&#39;t read this proposal carefully on its initial presentation for review.<br>
&gt; Looking at it now, I wonder about the wisdom of &quot;location&quot;--I understand the<br>
&gt; rationale of avoiding multiple methods named &quot;index&quot; that do different things,<br>
&gt; but these particular functions return or mutate indices, and nowhere else are<br>
&gt; these called &quot;locations&quot;. If you&#39;re asking for possible alternative suggestions<br>
&gt; to avoid using &quot;index&quot;, I&#39;ll suggest the following here because I don&#39;t recall<br>
&gt; seeing them offered previously. They read as phrases or sentences:<br>
&gt;<br>
&gt; ```<br>
&gt; // taking inspiration from ForwardIndexType, which is no more...<br>
&gt; c.advancing(_ i: Index, by offset: IndexDistance, limit: Index)<br>
<br>
</span>As I&#39;ve said before, the “ing” suffix strongly implies we&#39;re returning<br>
(a version of) `c`, not of `i`.  c.f.<br>
<br>
   Please hand me **your coat, emptying the left pocket**.<br>
<br>
You&#39;re not going to get a pocket; you&#39;re getting a whole coat.<br></blockquote><div><br></div><div>Quite right; didn&#39;t mean to retread that. I feel the same deficiency applies to using the &quot;form&quot; convention, though, in that (at least as has been discussed on this list) the convention usually refers to the receiver being mutated. Thus, `c.formLocation(...)` sounds like `c` should be mutated in some way.</div><div><br></div><div>One way out that I can think of is looking to good ol&#39; Objective-C conventions. By this I mean that, in my mind, shorter method names like `str.appending(...)` are derived by omitting redundant words from longer ancestral names such as `str.stringByAppendingString(...)`. In this particular case, certain words are not redundant and perhaps we should just bravely put back those words that are necessary to clarify.</div><div><br></div><div>That is, if this were Objective-C, we&#39;d have something like &quot;indexByAdvancingIndex&quot;. You&#39;re quite right that we can&#39;t use just &quot;advancing&quot; because it implies returning a version of the receiver. We&#39;ve tried &quot;index&quot;, but then it conflicts with another method &quot;index&quot;. Now there&#39;s renaming &quot;index&quot; to &quot;location&quot;, even though it returns a thing of type Index... Aren&#39;t the most succinct but still accurate method names instead: `c.indexByAdvancing(i, ...)` and `c.advanceIndex(&amp;i, ...)`? [Incidentally, `c.advance` might read like c is being advanced.]</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class=""><br>
&gt; c.advance(_ i: inout Index, by offset: IndexDistance, limit: Index)<br>
&gt;<br>
&gt; // or alternatively, using the terminology in the comments that sit above<br>
&gt; `location`<br>
&gt; c.offsetting(_ i: Index, by n: IndexDistance, limit: Index)<br>
&gt; c.offset(_ i: inout Index, by n: IndexDistance, limit: Index)<br>
&gt;<br>
&gt; // and then, in place of successor, etc.<br>
&gt; c.incrementing(_ i: Index, limit: Index)<br>
&gt; c.increment(_ i: inout Index, limit: Index)<br>
&gt; c.decrementing(_ i: Index, limit: Index)<br>
&gt; c.decrement(_ i: inout Index, limit: Index)<br>
&gt; ```<br>
&gt; (&quot;&#39;Limit&#39; doesn&#39;t read like a phrase,&quot; you might say. Well, think of a coupon:<br>
&gt; &quot;$1 off one tub of margarine. Limit one per purchase. Void if transferred or<br>
&gt; sold.&quot;)<br>
<br>
</span>the limit label is the least of my concerns here :-)<br></blockquote><div><br></div><div>That said, orthogonally, I feel like many `limitedBy` labels can be simplified to `limit` :)</div><div> </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><br>
&gt;     &gt; On Mon, Apr 25, 2016 at 1:24 PM, Dave Abrahams via swift-evolution<br>
&gt;     &gt; &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;     &gt;<br>
&gt;     &gt; on Wed Apr 20 2016, Chris Lattner &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;     &gt;<br>
&gt;     &gt; &gt; On Apr 10, 2016, at 2:41 PM, Chris Lattner<br>
&gt;     &gt; &gt; &lt;<a href="mailto:clattner@apple.com">clattner@apple.com</a>&gt; wrote:<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; Hello Swift community,<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; The review of &quot;A New Model for Collections and Indices&quot; begins now and<br>
&gt;     &gt; runs<br>
&gt;     &gt; &gt; through April 18th. The proposal is available here:<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt;<br>
&gt;     &gt;<br>
&gt;     <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0065-collections-move-indices.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0065-collections-move-indices.md</a><br>
&gt;<br>
&gt;     &gt;<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; Reviews are an important part of the Swift evolution process. All<br>
&gt;     reviews<br>
&gt;     &gt; &gt; should be sent to the swift-evolution mailing list at:<br>
&gt;     &gt; &gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;     &gt; &gt; or, if you would like to keep your feedback private, directly to the<br>
&gt;     &gt; review<br>
&gt;     &gt; &gt; manager.<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; &gt; A quick update: the core team met to discuss this. They agreed to accept<br>
&gt;     &gt; it with<br>
&gt;     &gt; &gt; some naming-related revisions to the proposal (in response to community<br>
&gt;     &gt; &gt; feedback). Dave is organizing this feedback, and I’ll send out the<br>
&gt;     formal<br>
&gt;     &gt; &gt; announcement when that is ready.<br>
&gt;     &gt;<br>
&gt;     &gt; The final revisions are reflected in the latest version of the<br>
&gt;     &gt; proposal:<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0065-collections-move-indices.md" rel="noreferrer" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0065-collections-move-indices.md</a><br>
&gt;<br>
&gt;     &gt;<br>
&gt;     &gt; Summary:<br>
&gt;     &gt;<br>
&gt;     &gt; * We decided to take Shawn Erickson&#39;s excellent suggestion<br>
&gt;     &gt; &lt;<a href="http://article.gmane.org/gmane.comp.lang.swift.evolution/14450" rel="noreferrer" target="_blank">http://article.gmane.org/gmane.comp.lang.swift.evolution/14450</a>&gt; to<br>
&gt;     &gt; use “location” uniformly for index movement, so instead of<br>
&gt;     &gt; successor(i) and predecessor(i) we have location(after: i) and<br>
&gt;     &gt; location(before: i).<br>
&gt;     &gt;<br>
&gt;     &gt; * Since Brent Royal-Gordon pointed out<br>
&gt;     &gt;<br>
&gt;     &lt;<a href="http://news.gmane.org/find-root.php?message_id=156D8FB1%2d1FD3%2d448E%2d8C70%2d6E7400629BC0%40architechies.com" rel="noreferrer" target="_blank">http://news.gmane.org/find-root.php?message_id=156D8FB1%2d1FD3%2d448E%2d8C70%2d6E7400629BC0%40architechies.com</a><br>
&gt;<br>
&gt;     &gt; &gt;<br>
&gt;     &gt; that two of the three proposed Range protocols would likely disappear<br>
&gt;     &gt; in future updates, we took another look at all of them. Finding<br>
&gt;     &gt; `RangeProtocol` itself to be a very weak abstraction, we removed all<br>
&gt;     &gt; three from the proposal.<br>
&gt;     &gt;<br>
&gt;     &gt; For those interested in details, implementation work proceeds apace on<br>
&gt;     &gt; the swift-3-indexing-model branch at<br>
&gt;     &gt;<br>
&gt;     &lt;<a href="https://github.com/apple/swift/tree/swift-3-indexing-model/stdlib/public/core" rel="noreferrer" target="_blank">https://github.com/apple/swift/tree/swift-3-indexing-model/stdlib/public/core</a><br>
&gt;<br>
&gt;     &gt; &gt;.<br>
&gt;     &gt;<br>
&gt;     &gt; P.S. If anyone is interested in contributing, there are still plenty of<br>
&gt;     &gt; FIXMEs left for us to handle ;-)<br>
&gt;     &gt;<br>
&gt;     &gt; --<br>
&gt;     &gt; Dave<br>
&gt;     &gt;<br>
&gt;     &gt; _______________________________________________<br>
&gt;     &gt; swift-evolution mailing list<br>
&gt;     &gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
&gt;     &gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;     &gt;<br>
&gt;<br>
&gt;     --<br>
&gt;     Dave<br>
&gt;<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Dave<br>
</font></span></blockquote></div><br></div></div>