-1. I don't really see how this is a bad thing and why it has to change. To me 
this is one of the best features of the language and I want more of it (I've 
been through some situations it was totally obvious the expected type of a 
variable and the compiler couldn't infer it) not less.



-----Original Message-----
From: "Matthew Johnson via swift-evolution" <swift-evolution@swift.org>
Sent: ‎25/‎05/‎2016 07:06 PM
To: "David Hart" <da...@hartbit.com>
Cc: "Swift-evolution" <swift-evolution@swift.org>
Subject: Re: [swift-evolution] [Pitch] Remove associated type inference

I agree that if we’re going to do it we should probably do it in Swift 3.  But 
it is a very convenient and useful feature that significantly lowers the bar of 
conforming to protocols with associated types (in many cases you can just 
implement the required members without thinking about the associated types).  I 
think we should have a more detailed and compelling story about why we’re 
considering this change than I see in this proposal.


Are there any benefits users might receive from this change (assuming type 
checker architecture and bugs could eventually be ironed out)?  Is it actively 
blocking desirable new features?  If so what are they and in what way are they 
blocked?




On May 25, 2016, at 4:43 PM, David Hart via swift-evolution 
<swift-evolution@swift.org> 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:
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.
<path d="M4 9h1v1h-1c-1.5 0-3-1.69-3-3.5s1.55-3.5 3-3.5h4c1.45 0 3 1.69 3 3.5 0 
1.41-0.91 2.72-2 3.25v-1.16c0.58-0.45 1-1.27 1-2.09 
0-1.28-1.02-2.5-2-2.5H4c-0.98 0-2 1.22-2 2.5s1 2.5 2 2.5z m9-3h-1v1h1c1 0 2 
1.22 2 2.5s-1.02 2.5-2 2.5H9c-0.98 0-2-1.22-2-2.5 0-0.83 0.42-1.64 
1-2.09v-1.16c-1.09 0.53-2 1.84-2 3.25 0 1.81 1.55 3.5 3 3.5h4c1.45 0 3-1.69 
3-3.5s-1.5-3.5-3-3.5z"

[The entire original message is not included.]
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to