> On Jan 4, 2016, at 12:40 PM, Douglas Gregor <dgre...@apple.com> wrote:
> 
>> 
>> On Jan 4, 2016, at 10:30 AM, Matthew Johnson <matt...@anandabits.com 
>> <mailto:matt...@anandabits.com>> wrote:
>> 
>>> 
>>> On Jan 4, 2016, at 12:21 PM, Douglas Gregor via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> 
>>>> On Jan 3, 2016, at 4:19 PM, David Waite <da...@alkaline-solutions.com 
>>>> <mailto:da...@alkaline-solutions.com>> 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.

Agree.  The other primary motivation I know of for that request is something 
like ConvertibleTo<T> where you multiple conformances would be possible.  

I am familiar with the reasons why Swift is avoiding that path. :)

> 
> 
>> 
>>> 
>>>     - Doug
>>> 
>>>> 
>>>> -DW
>>>> 
>>>>> On Jan 3, 2016, at 4:17 PM, Douglas Gregor via swift-evolution 
>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>> 
>>>>> 
>>>>>> On Jan 3, 2016, at 6:48 AM, Антон Жилин via swift-evolution 
>>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> 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
>>>>> 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 
>>> <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