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

Vladimir.S svabox at gmail.com
Tue Jun 6 13:09:45 CDT 2017


On 06.06.2017 19:41, Mark Lacey wrote:
> 
>> On Jun 6, 2017, at 4:00 AM, Vladimir.S <svabox at gmail.com <mailto:svabox at gmail.com>> 
>> wrote:
>>
>> 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)->()
> 
> Can you open two reports at bugs.swift.org <http://bugs.swift.org>, one for the ‘is’ 
> issue, and one for type(of:)?
> 
> These (along with the issue with function declarations that Jens mentioned) are all 
> similar issues, but each is in a different part of the compiler.

Here they are:
https://bugs.swift.org/browse/SR-5114  (typeof)
https://bugs.swift.org/browse/SR-5112  (is)

> 
> Mark
> 
> 
>>
>> 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> 
>>>> <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> <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> 
>>>>> <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>
>>>>>    <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> <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> <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> 
>>>>> <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> 
>>>> <mailto:swift-evolution at swift.org>
>>>> 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
> 


More information about the swift-evolution mailing list