<html><head><style>
body {
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
        padding:1em;
        margin:auto;
        background:#fefefe;
}

h1, h2, h3, h4, h5, h6 {
        font-weight: bold;
}

h1 {
        color: #000000;
        font-size: 28pt;
}

h2 {
        border-bottom: 1px solid #CCCCCC;
        color: #000000;
        font-size: 24px;
}

h3 {
        font-size: 18px;
}

h4 {
        font-size: 16px;
}

h5 {
        font-size: 14px;
}

h6 {
        color: #777777;
        background-color: inherit;
        font-size: 14px;
}

hr {
        height: 0.2em;
        border: 0;
        color: #CCCCCC;
        background-color: #CCCCCC;
    display: inherit;
}

p, blockquote, ul, ol, dl, li, table, pre {
        margin: 15px 0;
}

a, a:visited {
        color: #4183C4;
        background-color: inherit;
        text-decoration: none;
}

#message {
        border-radius: 6px;
        border: 1px solid #ccc;
        display:block;
        width:100%;
        height:60px;
        margin:6px 0px;
}

button, #ws {
        font-size: 12 pt;
        padding: 4px 6px;
        border-radius: 5px;
        border: 1px solid #bbb;
        background-color: #eee;
}

code, pre, #ws, #message {
        font-family: Monaco;
        font-size: 10pt;
        border-radius: 3px;
        background-color: #F8F8F8;
        color: inherit;
}

code {
        border: 1px solid #EAEAEA;
        margin: 0 2px;
        padding: 0 5px;
}

pre {
        border: 1px solid #CCCCCC;
        overflow: auto;
        padding: 4px 8px;
}

pre > code {
        border: 0;
        margin: 0;
        padding: 0;
}

#ws { background-color: #f8f8f8; }


.bloop_markdown table {
border-collapse: collapse;  
font-family: Helvetica, arial, freesans, clean, sans-serif;  
color: rgb(51, 51, 51);  
font-size: 15px; line-height: 25px;
padding: 0; }

.bloop_markdown table tr {
border-top: 1px solid #cccccc;
background-color: white;
margin: 0;
padding: 0; }
     
.bloop_markdown table tr:nth-child(2n) {
background-color: #f8f8f8; }

.bloop_markdown table tr th {
font-weight: bold;
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }

.bloop_markdown table tr td {
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }

.bloop_markdown table tr th :first-child, table tr td :first-child {
margin-top: 0; }

.bloop_markdown table tr th :last-child, table tr td :last-child {
margin-bottom: 0; }

.bloop_markdown blockquote{
  border-left: 4px solid #dddddd;
  padding: 0 15px;
  color: #777777; }
  blockquote > :first-child {
    margin-top: 0; }
  blockquote > :last-child {
    margin-bottom: 0; }

code, pre, #ws, #message {
    word-break: normal;
    word-wrap: normal;
}

hr {
    display: inherit;
}

.bloop_markdown :first-child {
    -webkit-margin-before: 0;
}

code, pre, #ws, #message {
    font-family: Menlo, Consolas, Liberation Mono, Courier, monospace;
}


.send { color:#77bb77; }
.server { color:#7799bb; }
.error { color:#AA0000; }</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class="bloop_markdown"><p>Labels create more harm in tuple destructuring than they solve.</p>

<pre><code class="swift">let point = (x: 0, y: 0)

let (myX, myY) = point // fine
let (x: my_X, y: my_Y) = point // fine

let tuple = (a: 0, innerTuple: point)

let (myA, myInnerTuple) = tuple

// The following destructuring can extract nested tuples as well
let (a: a, innerTuple: (x: x, y: y)) = tuple // fine

// Let's try the same without labels
let (my_A, (myNewX, myNewY)) = tuple
// error: cannot express tuple conversion '(a: Int, innerTuple: (x: Int, y: Int))' to '(Int, (Int, Int))'
// Wait what? It did worked above with `point`

// Let's try something else
let (a: _, innerTuple: (newX, newY)) = tuple
// '(a: Int, innerTuple: (x: Int, y: Int))' to '(a: Int, innerTuple: (Int, Int))'

// Yet another approach
let (a: _, innerTuple: inner) = tuple // fine
</code></pre>

<p>From this I conclude that tuple destructuring creates a new tuple, which is not my intention at all, at least not in terms of extracting data. The types become incompatible with each other if not labeled properly and that’s why we cannot omit unwanted labels and are forced to either type them all out to extract nested data or none of them at all. </p>

<p></p></div><div class="bloop_original_html"><style>body{font-family:Helvetica,Arial;font-size:13px}</style><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div> <br> <div id="bloop_sign_1493980506601995008" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div> <br><p class="airmail_on">Am 5. Mai 2017 um 09:32:02, Xiaodi Wu (<a href="mailto:xiaodi.wu@gmail.com">xiaodi.wu@gmail.com</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div><div></div><div>


<title></title>


<div dir="ltr">On Fri, May 5, 2017 at 2:28 AM, Adrian Zubarev
<span dir="ltr">&lt;<a href="mailto:adrian.zubarev@devandartist.com" target="_blank">adrian.zubarev@devandartist.com</a>&gt;</span>
wrote:<br>
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">
<div class="m_-5555134904584300890bloop_markdown">
<p>I’m not arguing to remove all labels in Swift. Labels are great,
this is a fact for sure. The point I was trying to make is that
labels in tuples how either a meaning or not at all.</p>
<pre><code class="m_-5555134904584300890swift">// This is a shortcut for the tuple type `(x: Int, y: Int)`
let foo = (x: 0, y: 0)   

// In this case the labels are only used for description,   
// they do not server any benefit here are most likely redundant
let (x: x, y: y) = foo   
</code></pre>
<p>Labels elsewhere are a different story and I do support the
cosmetic addition Chris Lattner sketched out here: <a href="https://lists.swift.org/pipermail/swift-evolution-announce/2016-July/000233.html" target="_blank">https://lists.swift.org/<wbr>pipermail/swift-evolution-<wbr>announce/2016-July/000233.html</a></p>
<p>However this is about closures and not tuples, I don’t think
this would anyhow affect the removal of labels in tuple
destructuring.</p>
<p>Plus I don’t see this to create an inconsistent in Swift,
because as I already said, labels in tuple destructuring are
useless.</p>
</div>
</div>
</blockquote>
<div>How come? I just illustrated their use. They help humans write
correct code by allowing the compiler to check an assertion that
the human knows which labels go with which positions in the
tuple.</div>
</div>
</div>
</div>


</div></div></span></blockquote></div><div class="bloop_markdown"><p></p></div></body></html>