> On May 25, 2016, at 11:43 PM, David Hart via swift-evolution
> <[email protected]> wrote:
>
> Here’s a pitch for removing associated type inference as per the Generics
> Manifesto. If we want to do it, we’d better do it before Swift 3:
>
> Remove associated type inference
> Proposal: SE-XXXX
> Author: David Hart, Douglas Gregor
> Status: TBD
> Review manager: TBD
> Introduction
>
> This proposal seeks to remove the inference of associated types in types
> conforming to protocols.
>
> Motivation
>
> Even if associated types inference in a useful feature, it is also a big
> source of bugs in the compiler. This proposal argues that the usefulness does
> not outweight its architectural complexity. As per the Generics Manifesto:
>
> associated type inference is the only place in Swift where we have a global
> type inference problem: it has historically been a major source of bugs, and
> implementing it fully and correctly requires a drastically different
> architecture to the type checker.
> Because this is a breaking change, it would be beneficial to implement it for
> Swift 3.
>
> Detailed Design
>
> The proposal would remove associated type inference and make code which
> relied on it invalid:
>
> protocol IteratorProtocol {
> associatedtype Element
> mutating func next() -> Element?
> }
>
> struct IntIterator : IteratorProtocol {
> mutating func next() -> Int? { ... } // used to infer Element = Int
> }
> The compiler would generate an error message stating: error: IntIterator is
> missing its Element associated type declaration. The code would have to be
> modified as follows to fix the error:
>
>From a purely english syntax viewpoint, i would prefer the error to be along
>the lines of
> IntIterator is missing a declaration for the Element associated type
>
Or
> IntIterator is missing a declaration for its Element associated type
>
> struct IntIterator : IteratorProtocol {
> typealias Element = Int
> mutating func next() -> Int? { return nil } // used to infer Element =
> Int
> }
> Impact on Existing Code
>
> This is a breaking change that will require conforming types which relied on
> the inference, including in the Standard Library, to explicitly declare
> associated types. A Fix-It could be introduced to add the typealias and leave
> the type to be filled in. That way, all the type inference could be removed
> from the compiler.
>
> Alternatives Considered
>
> The only alternative is to keep the inference with the known consequences on
> the compiler.
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution