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

Vladimir.S svabox at gmail.com
Tue Jun 6 06:00:10 CDT 2017


Mark, could you please also comment this inconsistencies / bugs :
(swift-4.0-DEVELOPMENT-SNAPSHOT-2017-06-01-a-osx)

func fooParam(_ x: Int, _ y: Int){}
func fooTuple(_ x: (Int, Int)) {}

print("type of fooParam is", type(of:fooParam))
// result: type of fooParam is (Int, Int) -> ()

print("type of fooTuple is", type(of:fooTuple))
// result: type of fooTuple is (Int, Int) -> ()

print("type of fooTuple as (_:(Int,Int))->Void is", type(of: fooTuple as 
(_:(Int,Int))->()))
// result: type of fooTuple as (_:(Int,Int))->() is (Int, Int) -> ()


print("type of fooParam == type of fooTuple ?", type(of: fooParam) == type(of: fooTuple))
// result: true

if fooParam is (_: (Int,Int))->() { print("fooParam is (_: (Int,Int))->()") }
// result: fooParam is (_: (Int,Int))->()

if fooTuple is (Int,Int)->() { print("fooTuple is (Int,Int)->()") }
// result: fooTuple is (Int,Int)->()

var closureParam = { (x: Int, y: Int) in  }
var closureTuple = { (x: (Int, Int)) in  }

print("type of closureParam is", type(of:closureParam))
// result: type of closureParam is (Int, Int) -> ()

print("type of closureTuple is", type(of:closureTuple))
// result: type of closureTuple is (Int, Int) -> ()

if closureParam is (_: (Int,Int))->() { print("closureParam is (_: (Int,Int))->()") }
// result: closureParam is (_: (Int,Int))->()

if closureTuple is (Int,Int)->() { print("closureTuple is (Int,Int)->()") }
// result: closureTuple is (Int,Int)->()

Thank you.
Vladimir.

On 06.06.2017 11:43, Mark Lacey via swift-evolution wrote:
> 
>> On Jun 6, 2017, at 12:08 AM, Jens Persson via swift-evolution 
>> <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>
>> IMHO There seems to be a lot of bugs and inconsistencies left in more than just the 
>> reflective type system, for example the following won't compile although the two 
>> foo funcs clearly take different types as argument:
>>
>> func foo(fun: (Int, Int) -> ()) { print("was given a function of type: (Int, Int) 
>> -> ()") }
>> func foo(fun: ((Int, Int)) -> ()) { print("was given a function of type: ((Int, 
>> Int)) -> ()") }
> 
> I took a look at this. When determining if we have conflicting declarations, we 
> compute an interface type and this computation is stripping the parens around the 
> tuple in the second example, resulting in these two signatures appearing to be the 
> same, despite the fact that the types of the arguments to the two functions are 
> different.
> 
>> // This will result in error: invalid redeclaration of 'foo(fun:)'
>>
>> I would expect this to compile, and I can't understand how this has anything to do 
>> with the reflective type system.
>>
>>
>> Here is another example:
>>
>> func add(_ a: Int, _ b: Int) -> Int { return a + b }
>> let a: (Int, Int) -> Int = add
>> let b: ((Int, Int)) -> Int = add // This is OK, unexpectedly
> 
> I didn’t have a chance to look at this yet. I suspect this is related to the swap 
> example that you gave previously.
> 
>> I would not expect it to compile since the add func does not have the type ((Int, 
>> Int)) -> Int.
>> I don't think that is a dynamic cast, is it?
> 
> Would you mind opening bugs for all four issues - the two mentioned above and the two 
> from the previous e-mail (with type(of:) and swap examples)? Despite the fact that 
> some of these might have different underlying causes it would be useful to have 
> separate bugs and if they turn out to be the same issue we can dup as appropriate.
> 
> Mark
> 
>>
>> /Jens
>>
>>
>>
>>
>> On Tue, Jun 6, 2017 at 2:45 AM, John McCall <rjmccall at apple.com 
>> <mailto:rjmccall at apple.com>> wrote:
>>
>>>     On Jun 5, 2017, at 12:08 AM, Jens Persson via swift-evolution
>>>     <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>     So the bug in the reflective type system needs to be fixed before SE-0110 can
>>>     actually be implemented (so that the statements in its title and text are true
>>>     when compared to the actual behavior of the current Swift 4 compiler), 
>>
>>     Gaps in the reflective type system are bugs, but they are not showstopper
>>     bugs.  We do not even expose any way to query the reflective system today; it
>>     basically only affects type equality and dynamic casts that programmers are
>>     very unlikely to use.  The changes in call type-checking are vastly more
>>     important, are implemented (modulo bugs, of course), and by themselves warrant
>>     calling SE-0110 implemented.
>>
>>     John.
>>
>>>
>>>     And yet:
>>>
>>>     1. The status of SE-0110 is "Implemented"
>>>
>>>     2. These statuses of the following issues are "resolved":
>>>         SR-2008: Distinguish between single-tuple and multiple-argument function types
>>>         SR-2216: Confusing behavior related to closure types and tuples
>>>         SR-296: Fix inconsistencies related to tuples, arg/param lists, type
>>>     params, typealiases
>>>
>>>     Why?
>>>
>>>     /Jens
>>>
>>>
>>>     On Sun, Jun 4, 2017 at 5:49 PM, Ben Rimmington <me at benrimmington.com
>>>     <mailto:me at benrimmington.com>> wrote:
>>>
>>>         I assumed that Swift 3 mode would be the default, so that existing
>>>         `#!/usr/bin/swift` scripts continue to work.
>>>
>>>         -- Ben
>>>
>>>         > On 3 Jun 2017, at 23:47, Jens Persson <jens at bitcycle.com <mailto:jens at bitcycle.com>> wrote:
>>>         >
>>>         > Yes of course, try my demonstration code yourself.
>>>         > (In the current dev snapshots, -swift-version 4 is the default and -swift-version 3 is what you need to set if you want 3 compability)
>>>         >
>>>         >> On Sun, Jun 4, 2017 at 12:37 AM, Ben Rimmington <me at benrimmington.com <mailto:me at benrimmington.com>> wrote:
>>>         >>
>>>         >> Are you using the Swift 4 language mode?
>>>         >>
>>>         >> <https://swift.org/blog/swift-4-0-release-process/#source-compatibility
>>>         <https://swift.org/blog/swift-4-0-release-process/#source-compatibility>>
>>>         >>
>>>         >> -- Ben
>>>
>>>
>>>     _______________________________________________
>>>     swift-evolution mailing list
>>>     swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>>     https://lists.swift.org/mailman/listinfo/swift-evolution
>>>     <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
> 


More information about the swift-evolution mailing list