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