> On Jan 4, 2016, at 10:30 AM, Matthew Johnson <[email protected]> wrote:
> 
>> 
>> On Jan 4, 2016, at 12:21 PM, Douglas Gregor via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>> 
>>> On Jan 3, 2016, at 4:19 PM, David Waite <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> This would be wonderful - is it something that could happen in the Swift 3 
>>> timeframe?
>> 
>> I hesitate to say “yes” here. I think it fits with the goals of Swift 3, but 
>> my main concern is that there isn’t enough engineering bandwidth to 
>> implement it for Swift 3.
>> 
>>> Is it something that myself or someone else could work on a formal proposal 
>>> for?
>> 
>> Yes, absolutely. This is a case where I think it’s useful to design what we 
>> want, even if we cannot fit the implementation into the Swift 3 schedule. 
>> It’s also a case where the compiler has a lot of the pieces already 
>> implemented (with some runtime bits landing soon), so the implementation 
>> should not be *that* hard and will likely not require architectural changes.
> 
> Interesting.  I was under the impression the core team was taking on the 
> generics features.

We are, and lots of them. I doubt we can handle another.

>  I am also very interested in helping to accelerate the process if that is 
> possible (whether that means Swift 3 or not).
> 
> Are you thinking specifically about unbound existentials like in your 
> Equatable example or also partly / fully bound existentials such as 
> SequenceType<Generator.Element == Int>?

I was thinking mostly about the former. However, the latter is also a 
highly-requested feature [*] that complements this one, and I think it’s 
reasonable to discuss both together.

        - Doug

[*] And is often the underlying reason why developers ask for parameterized 
protocols.


> 
>> 
>>      - Doug
>> 
>>> 
>>> -DW
>>> 
>>>> On Jan 3, 2016, at 4:17 PM, Douglas Gregor via swift-evolution 
>>>> <[email protected] <mailto:[email protected]>> wrote:
>>>> 
>>>> 
>>>>> On Jan 3, 2016, at 6:48 AM, Антон Жилин via swift-evolution 
>>>>> <[email protected] <mailto:[email protected]>> wrote:
>>>>> 
>>>>> Introduction of interfaces will clean up the current blend of static and 
>>>>> dynamic protocols, and solve at least three popular issues.
>>>>> Please see:
>>>>> https://github.com/Anton3/swift-evolution/blob/master/proposals/0000-introducing-interfaces.md
>>>>>  
>>>>> <https://github.com/Anton3/swift-evolution/blob/master/proposals/0000-introducing-interfaces.md>
>>>> I am *completely* against this proposal.
>>>> 
>>>> Fundamentally, you're trying to address the limitation that protocols with 
>>>> Self or associated type requirements can't be existential. But it's just a 
>>>> limitation that isn't (conceptually) that hard to fix: the primary 
>>>> operation you need to work with an existing of such a protocol is to 
>>>> "open" a value of existential type, giving a name to the dynamic type it 
>>>> stores. Let's invent one:
>>>> 
>>>>   func eq(x: Equatable, y: Equatable) -> Bool {
>>>>     // give the name T to the dynamic type stored in xT
>>>>     let xT = open x as T
>>>>     // is y also storing a T?
>>>>     guard let yT = y as? T else { return false }
>>>>     // check whether the Ts are equal
>>>>     return xT == yT
>>>>   }
>>>> 
>>>> Ignore the syntax: semantically, we've gone from a "dynamic" existential 
>>>> thing back to something more "static", just by giving a name to the type. 
>>>> Swift generics aren't really even static in any sense: what the do is give 
>>>> names to the types of values so one can establish relationships among 
>>>> different values. "open..as" would do that for existentials. 
>>>> 
>>>> Note that ether Swift compilers AST and SIL both have "open existential" 
>>>> operations that do this internally. They have no spelling in Swift code, 
>>>> but they are useful to describe operations on existentials. At present, 
>>>> they cannot be formed when the existential involves a protocol with Self 
>>>> or associated type requirements, but that's a limitation that isn't hard 
>>>> to address. 
>>>> 
>>>> As for your concerns about knowing when one can dynamically override and 
>>>> when one cannot...  There are issues here that need to be addressed. They 
>>>> aren't significant enough to warrant such a drastic change, and may not 
>>>> even require language changes at all. 
>>>> 
>>>>    - Doug
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> [email protected] <mailto:[email protected]>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to