<div dir="ltr">On Fri, May 5, 2017 at 12:54 AM, David Hart <span dir="ltr"><<a href="mailto:david@hartbit.com" target="_blank">david@hartbit.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="auto"><span class="gmail-"><div><br></div><div>On 5 May 2017, at 07:17, Robert Widmann via swift-evolution <<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>> wrote:<br><br></div><blockquote type="cite"><div><div>On the contrary, this is precisely what it means to deprecate tuple shuffles. You can’t map common parlance onto this term; the proposal and the Twitter thread weren’t merely about reordering arguments.</div><div><br></div><div><blockquote type="cite"><div>but it is entirely another ballgame to remove labels from tuple patterns altogether.</div></blockquote><br></div><div>It’s really not. Let me demonstrate:</div><div><br></div><div><blockquote type="cite"><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">To be clear, are you proposing the prohibition of *adding or removing* labels as well? A previous discussion on tuple shuffling on this list saw consensus that assigning a value of type (label1: T, label2: U) to a variable of type (T, U) and vice versa should absolutely be supported, whether or not reordering is permitted.</blockquote></div></div></blockquote><br></div><div>I am not proposing any changes to switching parameter labels through well-typed re-assignments. This is absolutely still going to be allowed:</div><div><br></div><div><div style="margin:0px;font-size:11px;line-height:normal;font-family:menlo"><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(186,45,162)">var</span><span style="font-variant-ligatures:no-common-ligatures"> z : (</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)">Int</span><span style="font-variant-ligatures:no-common-ligatures">, </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)">Int</span><span style="font-variant-ligatures:no-common-ligatures">) = (</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(39,42,216)">0</span><span style="font-variant-ligatures:no-common-ligatures">, </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(39,42,216)">0</span><span style="font-variant-ligatures:no-common-ligatures">)</span></div><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures;color:rgb(186,45,162)">var</span><span style="font-variant-ligatures:no-common-ligatures"> w : (x : </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)">Int</span><span style="font-variant-ligatures:no-common-ligatures">, y : </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(112,61,170)">Int</span><span style="font-variant-ligatures:no-common-ligatures">) = (</span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(39,42,216)">5</span><span style="font-variant-ligatures:no-common-ligatures">, </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(39,42,216)">10</span><span style="font-variant-ligatures:no-common-ligatures">)</span></div><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures">z = w</span></div><div style="margin:0px;line-height:normal"><span style="font-variant-ligatures:no-common-ligatures">w = z</span></div></div></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:menlo"><span style="font-variant-ligatures:no-common-ligatures"><br></span></div><div style="margin:0px;font-size:11px;line-height:normal;font-family:menlo"><div style="font-family:helvetica;font-size:12px">This is modeled internally with a tuple shuffle, but not the kind of shuffle I’m interested in banning. It’s a far simpler kind of </div><div style="font-family:helvetica;font-size:12px"><br></div><div style="font-family:helvetica;font-size:12px"><blockquote type="cite"><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">And how about *restating* existing labels without any adding or removing? To be clear:<br><br>```<br>let (partialValue: v, overflow: o) = 42.addingReportingOverflow(42)<br>```<br><br>...involves absolutely no changes in labels whatsoever. The return type is (partialValue: Int, overflow: ArithmeticOverflow).<br></blockquote></div></div></blockquote><div style="font-family:helvetica;font-size:12px"><br></div><div style="font-family:helvetica;font-size:12px">That, however, is a kind of shuffle I intend to deprecate here. This kind of pattern is subject to the “arcane syntax” part of the proposal.</div><br><blockquote type="cite"><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br>Either one of these scenarios is commonly used, and it is astonishing to me that they would be eliminated.</blockquote></div></div></blockquote><br></div><div style="font-family:helvetica;font-size:12px">Do you have proof of that claim? I have never seen the relevant kinds of tuple shuffle used before, and I doubt you have either before today.</div></div></div></blockquote><div><br></div></span><div>For what it's worth, I thought I knew Swift inside out and I had never seen or used the syntax your are proposing to ban, so I'm all for it.</div></div></blockquote><div><br></div><div>If you google "Swift tuple destructuring," it's demonstrated in the third link you can click on. The article is even titled "best practices":</div><div><br></div><div><a href="https://github.com/terhechte/appventure-blog/blob/master/resources/posts/2015-07-19-tuples-swift-advanced-usage-best-practices.org">https://github.com/terhechte/appventure-blog/blob/master/resources/posts/2015-07-19-tuples-swift-advanced-usage-best-practices.org</a><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="auto"><div><div class="gmail-h5"><blockquote type="cite"><div><div style="margin:0px;font-size:11px;line-height:normal;font-family:menlo"><div style="font-family:helvetica;font-size:12px">~Robert Widmann</div></div><br><div><blockquote type="cite"><div>On May 5, 2017, at 12:53 AM, Xiaodi Wu <<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>> wrote:</div><br class="gmail-m_1742082391064118614Apple-interchange-newline"><div><div>Ah, I see from your proposed grammar update: you're proposing to prohibit the use of labels entirely in a tuple pattern.</div><div><br></div><div>This is much more than just prohibiting tuple shuffling, and I'm rather disappointed that you described such a dramatic change using a corner case. There are very good reasons why someone finds 'let (y: x, x: y) = (x: 1, y: 2)' confusing and would support its removal, but it is entirely another ballgame to remove labels from tuple patterns altogether.</div><div><br></div><div><br></div><div><div class="gmail_quote"><div>On Thu, May 4, 2017 at 23:47 Xiaodi Wu <<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Now I'm confused. The ordinary meaning of the word "shuffle" is not changing but rather reordering, and all of your examples are of reordering.<br><br>To be clear, are you proposing the prohibition of *adding or removing* labels as well? A previous discussion on tuple shuffling on this list saw consensus that assigning a value of type (label1: T, label2: U) to a variable of type (T, U) and vice versa should absolutely be supported, whether or not reordering is permitted.<br><br>And how about *restating* existing labels without any adding or removing? To be clear:<br><br>```<br>let (partialValue: v, overflow: o) = 42.addingReportingOverflow(42)<br>```<br><br>...involves absolutely no changes in labels whatsoever. The return type is (partialValue: Int, overflow: ArithmeticOverflow).<br><br>Either one of these scenarios is commonly used, and it is astonishing to me that they would be eliminated.<br><br><div class="gmail_quote"><div>On Thu, May 4, 2017 at 23:28 Robert Widmann <<a href="mailto:devteam.codafi@gmail.com" target="_blank">devteam.codafi@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div><div><div id="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128AppleMailSignature">That doesn't involve a parameter <i>reordering</i>, but because it changes argument labels it's a shuffle.</div><div id="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128AppleMailSignature"><br></div>~Robert Widmann</div><div><br>2017/05/05 0:16、Xiaodi Wu <<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>> のメッセージ:<br><br></div></div><div><blockquote type="cite"><div><div>Robert,</div><div><br></div><div>As I mentioned on Twitter, getting rid of tuple shuffles would not cure your example, which does not involve a shuffle. Unless you're proposing to disallow the use of labels during destructuring entirely, which I would think to be very much unacceptable. Example:</div><div><br></div><div>```</div><div>let (partialValue: v, overflow: o) = 42.addingReportingOverflow(42)</div><div>```</div><div><br></div><div>This involves no shuffling and should absolutely remain allowed.</div><div><br></div><div><br><div class="gmail_quote"><div>On Thu, May 4, 2017 at 21:15 Robert Widmann via swift-evolution <<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word">Hi all,<div><br></div><div>So sorry that this proposal comes so late in the game, but I feel it’s too important not to bring it to the attention of the community now. Attached is a proposal to deprecate a language feature many of you will probably have never had the chance to use: Tuple Shuffles. I’ve attached a copy of the first draft of the proposal below, but the latest copy can be read on <a href="https://github.com/apple/swift-evolution/pull/705/files" target="_blank">Github</a>.</div><div><br></div><div>Thanks!</div><div><br></div><div>~Robert Widmann</div><div><br></div><div><h1 style="box-sizing:border-box;margin:0px 0px 16px;line-height:1.25;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(234,236,239);color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';background-color:rgb(255,255,255)">Deprecate Tuple Shuffles</h1><ul style="box-sizing:border-box;padding-left:2em;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)"><li style="box-sizing:border-box">Proposal: <a href="https://github.com/CodaFi/swift-evolution/blob/8eaf320b3c2a117909fc0269c398e89c033a4b9f/proposals/NNNN-filename.md" style="box-sizing:border-box;background-color:transparent;color:rgb(3,102,214);text-decoration:none" target="_blank">SE-NNNN</a></li><li style="box-sizing:border-box;margin-top:0.25em">Authors: <a href="https://github.com/codafi" style="box-sizing:border-box;background-color:transparent;color:rgb(3,102,214);text-decoration:none" target="_blank">Robert Widmann</a></li><li style="box-sizing:border-box;margin-top:0.25em">Review Manager: TBD</li><li style="box-sizing:border-box;margin-top:0.25em">Status: <span style="box-sizing:border-box;font-weight:600">Awaiting review</span></li></ul><h2 style="box-sizing:border-box;margin-top:24px;margin-bottom:16px;line-height:1.25;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(234,236,239);color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';background-color:rgb(255,255,255)"><a id="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920user-content-introduction" class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920anchor" href="https://github.com/CodaFi/swift-evolution/blob/8eaf320b3c2a117909fc0269c398e89c033a4b9f/proposals/NNNN-deprecate-tuple-shuffles.md#introduction" style="box-sizing:border-box;background-color:transparent;color:rgb(3,102,214);text-decoration:none;float:left;padding-right:4px;line-height:1" target="_blank"><u></u><u></u><u></u><u></u></a>Introduction</h2><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)">This proposal seeks the deprecation of a little-known feature of Swift called a "Tuple Shuffle".</p><h2 style="box-sizing:border-box;margin-top:24px;margin-bottom:16px;line-height:1.25;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(234,236,239);color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';background-color:rgb(255,255,255)"><a id="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920user-content-motivation" class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920anchor" href="https://github.com/CodaFi/swift-evolution/blob/8eaf320b3c2a117909fc0269c398e89c033a4b9f/proposals/NNNN-deprecate-tuple-shuffles.md#motivation" style="box-sizing:border-box;background-color:transparent;color:rgb(3,102,214);text-decoration:none;float:left;padding-right:4px;line-height:1" target="_blank"><u></u><u></u><u></u><u></u></a>Motivation</h2><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)">A tuple-shuffle is an undocumented feature of Swift in which one can re-order the indices of a tuple by writing a pattern that describes a permutation in a syntax reminiscent of adding type-annotations to a parameter list:</p><div class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight-source-swift" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)"><pre style="box-sizing:border-box;font-family:sfmono-regular,consolas,'liberation mono',menlo,courier,monospace;font-size:13.600000381469727px;margin-top:0px;margin-bottom:0px;line-height:1.45;word-wrap:normal;padding:16px;overflow:auto;background-color:rgb(246,248,250);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-break:normal"><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">let</span> a <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">=</span> (<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">x</span>: <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">1</span>, <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">y</span>: <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">2</span>)
<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">var</span> b<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">:</span> (<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">y</span>: <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">Int</span>, <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">x</span>: <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">Int</span>)
b <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">=</span> a</pre></div><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)">It can be used to simultaneously destructure and reorder a tuple:</p><div class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight-source-swift" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)"><pre style="box-sizing:border-box;font-family:sfmono-regular,consolas,'liberation mono',menlo,courier,monospace;font-size:13.600000381469727px;margin-top:0px;margin-bottom:0px;line-height:1.45;word-wrap:normal;padding:16px;overflow:auto;background-color:rgb(246,248,250);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-break:normal"><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">let</span> tuple <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">=</span> (<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">first</span>: <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">0</span>, <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">second</span>: (<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">x</span>: <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">1</span>, <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">y</span>: <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">2</span>))
<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">let</span> (<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">second</span>: (<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">x</span>: b, <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">y</span>: c), <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">first</span>: a) <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">=</span> tuple</pre></div><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)">It can also be used to map parameter labels out of order in a call expression:</p><div class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight-source-swift" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)"><pre style="box-sizing:border-box;font-family:sfmono-regular,consolas,'liberation mono',menlo,courier,monospace;font-size:13.600000381469727px;margin-top:0px;margin-bottom:0px;line-height:1.45;word-wrap:normal;padding:16px;overflow:auto;background-color:rgb(246,248,250);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-break:normal"><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">func</span> <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-en" style="box-sizing:border-box;color:rgb(121,93,163)">foo</span>(<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-smi" style="box-sizing:border-box;color:rgb(51,51,51)"><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-en" style="box-sizing:border-box;color:rgb(121,93,163)">_</span></span> : (x : <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">Int</span>, y : <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">Int</span>)) {}
<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">foo</span>((<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">y</span>: <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">5</span>, <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">x</span>: <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">10</span>)) <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c" style="box-sizing:border-box;color:rgb(150,152,150)"><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c" style="box-sizing:border-box">//</span> Valid</span></pre></div><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)">Note that a tuple shuffle is distinct from a re-assignment through a tuple pattern. For example, this series of statements will continue to function as before:</p><div class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight-source-swift" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)"><pre style="box-sizing:border-box;font-family:sfmono-regular,consolas,'liberation mono',menlo,courier,monospace;font-size:13.600000381469727px;margin-top:0px;margin-bottom:0px;line-height:1.45;word-wrap:normal;padding:16px;overflow:auto;background-color:rgb(246,248,250);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-break:normal"><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">var</span> x <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">=</span> <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">5</span>
<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">var</span> y <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">=</span> <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">10</span>
<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">var</span> z <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">=</span> <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">15</span>
(z, y, x) <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">=</span> (x, z, y)</pre></div><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)">Their inclusion in the language complicates every part of the compiler stack, uses a <a href="https://twitter.com/CodaFi_/status/860246169854894081" style="box-sizing:border-box;background-color:transparent;color:rgb(3,102,214);text-decoration:none" target="_blank">syntax that can be confused for type annotations</a>, contradicts the goals of earlier SE's (see <a href="https://github.com/apple/swift-evolution/blob/9cf2685293108ea3efcbebb7ee6a8618b83d4a90/proposals/0060-defaulted-parameter-order.md" style="box-sizing:border-box;background-color:transparent;color:rgb(3,102,214);text-decoration:none" target="_blank">SE-0060</a>), and makes non-sensical patterns possible in surprising places.</p><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)">Take switch-statements, for example:</p><div class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight-source-swift" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)"><pre style="box-sizing:border-box;font-family:sfmono-regular,consolas,'liberation mono',menlo,courier,monospace;font-size:13.600000381469727px;margin-top:0px;margin-bottom:0px;line-height:1.45;word-wrap:normal;padding:16px;overflow:auto;background-color:rgb(246,248,250);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-break:normal"><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">switch</span> ((<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">0</span>, <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">0</span>), <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">0</span>){
<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">case</span> (<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">_</span> : <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">let</span> (y, z), <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c1" style="box-sizing:border-box;color:rgb(0,134,179)">_</span> : <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">let</span> s)<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">:</span> () <span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c" style="box-sizing:border-box;color:rgb(150,152,150)"><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c" style="box-sizing:border-box">//</span> We are forbidden from giving these patterns names other than "_" </span>
<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-c" style="box-sizing:border-box;color:rgb(150,152,150)"></span><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">default</span><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-k" style="box-sizing:border-box;color:rgb(167,29,93)">:</span> ()
}</pre></div><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)">This proposal seeks to deprecate them in Swift 3 compatibility mode and enforce that deprecation as a hard error in Swift 4 to facilitate their eventual removal from the language.</p><h2 style="box-sizing:border-box;margin-top:24px;margin-bottom:16px;line-height:1.25;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(234,236,239);color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';background-color:rgb(255,255,255)"><a id="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920user-content-proposed-solution" class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920anchor" href="https://github.com/CodaFi/swift-evolution/blob/8eaf320b3c2a117909fc0269c398e89c033a4b9f/proposals/NNNN-deprecate-tuple-shuffles.md#proposed-solution" style="box-sizing:border-box;background-color:transparent;color:rgb(3,102,214);text-decoration:none;float:left;padding-right:4px;line-height:1" target="_blank"><u></u><u></u><u></u><u></u></a>Proposed solution</h2><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)">Construction of Tuple Shuffle Expressions will become a warning in Swift 3 compatibility mode and will be a hard-error in Swift 4.</p><h2 style="box-sizing:border-box;margin-top:24px;margin-bottom:16px;line-height:1.25;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(234,236,239);color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';background-color:rgb(255,255,255)"><a id="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920user-content-detailed-design" class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920anchor" href="https://github.com/CodaFi/swift-evolution/blob/8eaf320b3c2a117909fc0269c398e89c033a4b9f/proposals/NNNN-deprecate-tuple-shuffles.md#detailed-design" style="box-sizing:border-box;background-color:transparent;color:rgb(3,102,214);text-decoration:none;float:left;padding-right:4px;line-height:1" target="_blank"><u></u><u></u><u></u><u></u></a>Detailed design</h2><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)">In addition to the necessary diagnostics, the grammar will be ammended to simplify the following productions:</p><div class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920highlight-source-diff" style="box-sizing:border-box;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)"><pre style="box-sizing:border-box;font-family:sfmono-regular,consolas,'liberation mono',menlo,courier,monospace;font-size:13.600000381469727px;margin-top:0px;margin-bottom:0px;line-height:1.45;word-wrap:normal;padding:16px;overflow:auto;background-color:rgb(246,248,250);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-break:normal">tuple-pattern → (tuple-pattern-element-list <opt>)
tuple-pattern-element-list → tuple-pattern-element | tuple-pattern-element , tuple-pattern-element-list
<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-md" style="box-sizing:border-box;color:rgb(189,44,0);background-color:rgb(255,236,236)"><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-md" style="box-sizing:border-box">-</span> tuple-pattern-element → pattern | identifier:pattern</span>
<span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-mi1" style="box-sizing:border-box;color:rgb(85,165,50);background-color:rgb(234,255,234)"><span class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920pl-mi1" style="box-sizing:border-box">+</span> tuple-pattern-element → pattern</span></pre></div><h2 style="box-sizing:border-box;margin-top:24px;margin-bottom:16px;line-height:1.25;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(234,236,239);color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';background-color:rgb(255,255,255)"><a id="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920user-content-impact-on-existing-code" class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920anchor" href="https://github.com/CodaFi/swift-evolution/blob/8eaf320b3c2a117909fc0269c398e89c033a4b9f/proposals/NNNN-deprecate-tuple-shuffles.md#impact-on-existing-code" style="box-sizing:border-box;background-color:transparent;color:rgb(3,102,214);text-decoration:none;float:left;padding-right:4px;line-height:1" target="_blank"><u></u><u></u><u></u><u></u></a>Impact on Existing Code</h2><p style="box-sizing:border-box;margin-top:0px;margin-bottom:16px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255)">Because very little code is intentionally using Tuple Shuffles, impact on existing code will be negligible but not non-zero.</p><h2 style="box-sizing:border-box;margin-top:24px;margin-bottom:16px;line-height:1.25;padding-bottom:0.3em;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgb(234,236,239);color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';background-color:rgb(255,255,255)"><a id="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920user-content-alternatives-considered" class="gmail-m_1742082391064118614m_-2923833813410546814m_-383149691311174760m_1919140766618257128m_5304457839982547920anchor" href="https://github.com/CodaFi/swift-evolution/blob/8eaf320b3c2a117909fc0269c398e89c033a4b9f/proposals/NNNN-deprecate-tuple-shuffles.md#alternatives-considered" style="box-sizing:border-box;background-color:transparent;color:rgb(3,102,214);text-decoration:none;float:left;padding-right:4px;line-height:1" target="_blank"><u></u><u></u><u></u><u></u></a>Alternatives considered</h2><div style="box-sizing:border-box;margin-top:0px;color:rgb(36,41,46);font-family:-apple-system,blinkmacsystemfont,'segoe ui',helvetica,arial,sans-serif,'apple color emoji','segoe ui emoji','segoe ui symbol';font-size:16px;background-color:rgb(255,255,255);margin-bottom:0px">Continue to keep the architecture in place to facilitate this feature.</div></div></div>______________________________<wbr>_________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">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>
</blockquote></div></div>
</div></blockquote></div></blockquote></div></blockquote></div></div>
</div></blockquote></div><br></div></blockquote><blockquote type="cite"><div><span>______________________________<wbr>_________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-<wbr>evolution</a></span><br></div></blockquote></div></div></div></blockquote></div><br></div></div>