[swift-evolution] Why is the status of SE-0110 "implemented"?

Jens Persson jens at bitcycle.com
Sat Jun 3 17:01:26 CDT 2017

I was notified that my SR-2216 and SR-296 had been "fixed as part of
implementing SE-0110".

But AFAICT SE-0110 can't possibly be fully implemented in dev snapshot
2017-06-02, even though the status of SE-0110 is "Implemented (Swift 4)".

The title of SE-0110 is
"Distinguish between single-tuple and multiple-argument function types"

Keep that in mind while observing the following demonstration of the (Swift
4) behavior of Developer Snapshot 2017-06-02 (a):

func f(_ a: Int, _ b: Int) { print("\(a), \(b)") }
func g(_ tuple: (Int, Int)) { print("\(tuple)") }
f(1, 2) // 1, 2
g((1, 2)) // (1, 2)
// Working as expected.

// But:
print(type(of: f) == type(of: g)) // true
// IMHO this is not how to properly
// "Distinguish between single-tuple and multiple-argument function types"

// And as if that wasn't enough (pay close attention):
var (fCopy, gCopy) = (f, g)
fCopy(1, 2) // 1, 2
gCopy((1, 2)) // (1, 2)
swap(&fCopy, &gCopy)
fCopy(1, 2) // (1, 2)
gCopy((1, 2)) // 1, 2
// Crazy!

I'm trying to put this behavior and the following pieces together:

1. The introdoction from SE-0110:
"Swift's type system should properly distinguish between functions that
take one tuple argument, and functions that take multiple arguments."

2. The status of SE-0110:
Implemented (Swift 4)

3. The "fixed as part of implementing SE-0110" notification of my bug
SR-2216: Confusing behavior related to closure types and tuples
SR-296: Fix inconsistencies related to tuples, arg/param lists, type
params, typealiases

Perhaps SE-0110 is just not fully implemented in dev snapshot 2017-06-02,
but it is implemented somewhere, why else should it get the status

But then I read the following by Vladimir S (one of the SE-0110 authors?):

It's a very interesting read, and it's nice to see these old
inconsistencies are getting some attention (they deserve all the attention
they can get), but I'm still confused.

Is it possible to implement SE-0110 without sorting out the above
demonstrated inconsistencies?

Should status of SE-0110 really be "Implemented"?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170604/01d2cf82/attachment.html>

More information about the swift-evolution mailing list