<div dir="ltr">on Date: Thu, 23 Nov 2017 09:56:35 +1100 Howard Lovatt &lt;<a href="mailto:howard.lovatt@gmail.com">howard.lovatt@gmail.com</a>&gt; wrote:<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">
<br>
I would defend turning tuples into structs (change from structural type to<br>
nominal type). This is a much better story for programmers, compare the two<br>
stories:<br>
<br>
   1. Tuples are just syntax sugar for simple structs.<br>
   2. Tuples are sort of like structs but there is a list of things tuples<br>
   can do that structs can&#39;t and a list of things structs can do and tuples<br>
   can&#39;t.<br>
<br>
I think unification can be achieved with some name mangling (Chris Lattner<br>
noted this previously - I am just spelling out one scheme), e.g.:<br>
<br>
// var a = (zero: 0, one: 1)<br>
public struct Tuple_zero_Int_one_Int { // Mangle name.<br>
    public var zero: Int<br>
    public var one: Int<br>
}<br>
var a = Tuple_zero_Int_one_Int(zero: 0, one: 1)<br>
// a.0 = -1<br>
a.zero = -1<br>
<br>
// var b = (0, 1)<br>
public struct Tuple_0_Int_1_Int { // Mangle name.<br>
    public var _0_: Int // Unique name.<br>
    public var _1_: Int // Unique name.<br>
}<br>
var b = Tuple_0_Int_1_Int(_0_: 0, _1_: 1)<br>
// a = b<br>
a = Tuple_zero_Int_one_Int(zero: b._0_, one: b._1_)<br>
<br>
<br>
Implicit in the above transformation is:<br>
<br>
   1. struct and tuple have the same memory layout.<br>
   2. `.0` access the 1st stored property of a struct, `.1` the 2nd, etc.<br></blockquote><div><br></div><div>not sure about the name mangling per se, but the very idea of treating tuples as structs is awesome and worth exploring.</div><div><br></div><div>Mike</div><div><br></div></div></div></div>