> On Jun 6, 2017, at 4:00 AM, Vladimir.S <sva...@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.

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@swift.org <mailto:swift-evolution@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 <rjmcc...@apple.com 
>>> <mailto:rjmcc...@apple.com>> wrote:
>>> 
>>>>    On Jun 5, 2017, at 12:08 AM, Jens Persson via swift-evolution
>>>>    <swift-evolution@swift.org <mailto:swift-evolution@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 <m...@benrimmington.com
>>>>    <mailto:m...@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 <j...@bitcycle.com 
>>>> <mailto:j...@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 
>>>> <m...@benrimmington.com <mailto:m...@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@swift.org <mailto:swift-evolution@swift.org>
>>>>    https://lists.swift.org/mailman/listinfo/swift-evolution
>>>>    <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> 
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to