<div dir="ltr">Think of the name of the mutating method sort as `mutating sort`, i.e. a different name than `sort` and therefore not an overload. This way the call and declaration match:<div><br></div><div>    struct Array&lt;T&gt;: ... { </div><div>        func mutating sort(...) { ... } </div><div>        func sort(...) -&gt; [T] { ... }</div><div>    }</div><div>    </div><div>    mutating array.sort(&gt;)</div><div>    let sorted = array.sort(&gt;)</div><div><br></div><div>As a critique of the `func mutating &lt;name&gt;` proposal consider:</div><div><br></div><div>    protocol P {</div><div>        func mutating p()</div><div>        func p()</div><div>    }</div><div>    </div><div>    class AP: P {</div><div>        func mutating p() { ... } // `mutating` not currently allowed in a class</div><div>        func p() { ... }</div><div>    }</div><div>    </div><div>    let aP = AP()</div><div>    mutating aP.p() // Odd since `aP` is a let - but would everyone get used to it quickly and realize that what `aP` points to is mutated</div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature">  -- Howard.<br></div></div>
<br><div class="gmail_quote">On 28 April 2016 at 07:50, Michael Peternell <span dir="ltr">&lt;<a href="mailto:michael.peternell@gmx.at" target="_blank">michael.peternell@gmx.at</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Isn&#39;t there a strong convention that overloaded methods should be very similar? Like a print function that takes a String and a print function that takes an Int? Having two &#39;sort&#39; functions that are not even similar, but that just refer to the same concept (&#39;sorting&#39;) seems confusing, and I haven&#39;t seen this in any other language so far. I think overloading is a somewhat advanced topic, and programming beginners should be allowed to be ignorant about this feature and just think &quot;print is a function that prints its argument to the console&quot; or &quot;sort is a function that sorts a sequence&quot; - not having to care if the function is overloaded or not. (I know that print() is not an overloaded function is Swift, this was just an example.)<br>
<br>
-Michael<br>
<br>
&gt; Am 27.04.2016 um 23:13 schrieb Howard Lovatt via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt;:<br>
&gt;<br>
&gt; Personally I like the xxx and xxxed naming, e.g. sort and sorted, and think it should be universally applied, e.g. union and unioned.<br>
&gt;<br>
&gt; However that proved unpopular and we ended up with a hybrid with sort and sorted but union and formUnion. Which no one seems to like!<br>
&gt;<br>
&gt; Therefore I suggest a new review for the proposed:<br>
&gt;<br>
&gt;     mutating array.sort(&lt;)<br>
&gt;     let sorted = array.sort(&lt;)<br>
&gt;     mutating set.union(other)<br>
&gt;     let unioned = set.union(other)<br>
&gt;<br>
&gt; I think the motivation for new review, or new information if you like, is the discussion didn&#39;t cease after the decision was taken, unlike most discussions on swift-evolution.<br>
&gt;<br>
&gt; On Wednesday, 27 April 2016, Matthew Johnson via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; Sent from my iPad<br>
&gt;<br>
&gt; On Apr 27, 2016, at 12:37 AM, Thorsten Seitz via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt; Am 26. April 2016 um 22:02 schrieb Dave Abrahams &lt;<a href="mailto:dabrahams@apple.com">dabrahams@apple.com</a>&gt;:<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; on Tue Apr 26 2016, Thorsten Seitz &lt;tseitz42-AT-icloud.com&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Am 23.04.2016 um 10:27 schrieb Pyry Jahkola via swift-evolution<br>
&gt;&gt;&gt;&gt; &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt;:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I&#39;d like to second James Campbell&#39;s suggestion of a `mutate` keyword.<br>
&gt;&gt;&gt;&gt; Clarifying comments inline below:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On 23 Apr 2016, at 00:24, Dave Abrahams via swift-evolution<br>
&gt;&gt;&gt;&gt; &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; This is not a new idea. Something almost identical to this has been<br>
&gt;&gt;&gt;&gt; explored and discussed quite thoroughly already:<br>
&gt;&gt;&gt;&gt; &lt;<a href="https://github.com/apple/swift/blob/master/docs/proposals/Inplace.rst" rel="noreferrer" target="_blank">https://github.com/apple/swift/blob/master/docs/proposals/Inplace.rst</a>&gt;.<br>
&gt;&gt;&gt;&gt; In fact, it was implmented and later reverted because it raised<br>
&gt;&gt;&gt;&gt; language-design questions for which we had no good answers.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I don&#39;t know if the following are particularly good answers, but I&#39;ll try<br>
&gt;&gt;&gt;&gt; anyway:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I don&#39;t believe the choice of glyph (&amp; vs =) affects any of the<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; fundamental issues:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; * Should the x.=f() syntax be required for *every* mutating method<br>
&gt;&gt;&gt;&gt; invocation?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Allow me to ask it differently: Should some specific syntax be required for<br>
&gt;&gt;&gt;&gt; every mutating method? — Yes.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I think I like that idea.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Should the syntax be `x.=f()`? — Not necessarily. I kinda like James<br>
&gt;&gt;&gt;&gt; Campbell&#39;s idea of a `mutate` keyword. Consider the following:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; var numbers = [5, 12, 6, 2]<br>
&gt;&gt;&gt;&gt; mutate numbers.append(10)<br>
&gt;&gt;&gt;&gt; mutate numbers.sort()<br>
&gt;&gt;&gt;&gt; if let biggest = mutate numbers.popLast() {<br>
&gt;&gt;&gt;&gt; print(&quot;The biggest number was:&quot;, biggest)<br>
&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; So `mutate` would work much like `try` but—unlike `try` which can move<br>
&gt;&gt;&gt;&gt; further to the left—`mutate` would have to always prefix the mutating<br>
&gt;&gt;&gt;&gt; receiver.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; That doesn&#39;t look so bad (we might shorten &#39;mutate&#39; to &#39;mut&#39;, though I don&#39;t<br>
&gt;&gt;&gt;&gt; think that would be really necessary).<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; We&#39;ve already discussed this whole question length, specifically<br>
&gt;&gt;&gt; considered the direction of an almost-identical language feature, and<br>
&gt;&gt;&gt; ended up settling on the “form/ed/ing” naming conventions. If there is<br>
&gt;&gt;&gt; some new information since then, it would be possible to handle<br>
&gt;&gt;<br>
&gt;&gt; The new information might be that the &quot;form&quot; naming conventions have not been that well received, i.e. the naming discussion cannot really be described as &quot;settled&quot; :-)<br>
&gt;<br>
&gt; Also, I could be wrong but IIRC the discussion of having some kind of &quot;mutation&quot; syntax post Swift 3 was held open when that discussion concluded.  It was just out of scope for Swift 3 to address all of the necessary issues.<br>
&gt;<br>
&gt; I hope this issue isn&#39;t settled once and for all as I am not very happy with the current solution.  The &quot;form&quot; names are quite awkward and confusing IMO.  I would eventually get used to them but that is the problem - they will really take getting used to.<br>
&gt;<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; -Thorsten<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;<br>
<span class="HOEnZb"><font color="#888888">&gt;<br>
&gt; --<br>
&gt; -- Howard.<br>
&gt; _______________________________________________<br>
&gt; swift-evolution mailing list<br>
&gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
&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>
<br>
</font></span></blockquote></div><br></div>