I absolutely agree that it&#39;s a problem worth solving. However, the question is whether a particular proposed design solves the problem and avoids previously stated weaknesses. What I&#39;m saying here is that, so far, the conversation in this thread has involved reiterating already-proposed designs that have been critiqued. It&#39;s really quite tiring for me too to repeat the same critique when someone raises the same proposal a second or third time.<br><br>It&#39;s possible that it makes sense to have a separate syntax for retroactive modeling. I haven&#39;t been able to come up with one that seems reasonable to me, or I would have written to this list to propose it. Do you have such a design in mind?<br><div class="gmail_quote"><div dir="ltr">On Fri, Sep 16, 2016 at 16:59 Charles Srstka &lt;<a href="mailto:cocoadev@charlessoft.com">cocoadev@charlessoft.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">On Sep 16, 2016, at 4:08 PM, Xiaodi Wu via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br><div><blockquote type="cite"><br><div><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">We&#39;ve had this discussion on the list multiple times already. The gist of the difficulty here is that most proposals for a mandatory keyword don&#39;t permit retroactive modeling, so it&#39;s a no-go. On the other hand, the core team seems to take a dim view to optional syntax, since that&#39;s more in the ballpark of linters.</span></div></blockquote></div><br></div><div style="word-wrap:break-word"><div>Numerous solutions to your objection have been proposed; you always simply dismiss all of them in favor of your dogmatic stance. It’s really quite tiring. You can have this and support retroactive modeling; you just might need to have a separate syntax for retroactive conformances. You keep bringing that up as a hard-and-fast objection, but you know what? Maybe retroactive conformances <b>should</b> have a separate syntax, because they’re not saying the same thing! One is saying &quot;here are some methods that will make this type conform to this protocol”, where the other is saying “this type already has the methods that conform to this protocol somewhere.” These are not the same thing, and it might be confusing to see a conformance declaration and assume it’s the former when it’s actually the latter, and then have trouble finding the conformances. Maybe it would actually make your code clearer if retroactive conformances were required to declare “this method exists somewhere else already.” Maybe you could even command-click on it and jump to the actual declaration. Anything would be better than the current situation, because:</div><div><br></div><div>The reason this keeps coming up is because it’s a real problem. I myself have started taking up the practice of always using copy-and-paste to declare conformances to protocols, because otherwise the chances of mistyping something and having the bug not manifest itself until runtime is simply too high. This is not a “linter” problem; this affects basic functionality and makes protocols, honestly, really dangerous to use. For a language that bills itself as “protocol-oriented”, it’s really quite damning that its protocol support is this brittle and fragile compared to its support for traditional inheritance. I’ve been bitten by this enough times by now to somewhat regret the decision to go with a protocol-based design. This is a real shame because conceptually, the idea of Swift’s protocol-based design is really cool.</div></div><div style="word-wrap:break-word"><div><br></div><div>Charles</div><div><br></div></div></blockquote></div>