Well, Swift is Swift, so if Swift does make the distinction, that’s what we should be relating to isn’t it?
For me it is natural that a tuple is anonymous whereas a struct is specific. Sort of like a type level analogy to struct instances being indistinguishable as long as their properties have the same values. So struct instances are anonymous. In the same way all tuples with the same signature should be at least isomorphic. I realise that tuple labels make it problematic (although I believe you should be able to cast say (a: Int, b: Int) to (x: Int, y: Int) but that is a separate discussion).
If you allow tuples to implement protocols, they must be able to have methods defined on them, and even have properties, at least computed ones. And for some protocols it only makes sense to have stored properties, and then it’s only the name that is missing, they are just nameless structs. I suppose that would be fine, but they become hard to justify then, it’s like they are just a notational convenience. And then I guess you could say that this is what my pitch aims to do anyway.
There’s also a practical point, it’s harder to understand what is going on if tuples suddenly can have methods and properties. If you define .length on the integer coordinate (as a tuple) then all Int 2-tuples will have length, even ones that have nothing to do with vectors. It’s all or nothing, which makes it pretty confusing and I would say almost useless.
So to sum up, the way I see it, tuples are for case where you don’t want any structure or type identity - there is only one kind of (Int, Int). If you want to make distinctions, define a struct.
At the same time, there are some methods I wish were available on all tuples, like the ability to iterate over their members. But of course this particular example, and maybe many others like it, only makes sense for homogenous tuples, which would perhaps better be thought of as fixed length arrays.