<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div></div><div><br></div><div><br>On Apr 28, 2016, at 20:51, Erica Sadun via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><meta http-equiv="Content-Type" content="text/html charset=us-ascii"><br class=""><div><blockquote type="cite" class=""><div class="">On Apr 28, 2016, at 6:44 PM, Andrew Bennett &lt;<a href="mailto:cacoyi@gmail.com" class="">cacoyi@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hey, what annotations would I have in this case:<br class=""><br class="">Module 1:<div class="" style="margin-bottom:16px;background-color:transparent;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:14px;overflow:visible!important"><pre style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;margin-top:0px;margin-bottom:0px;line-height:1.45;padding:16px;overflow:auto;background-color:rgb(247,247,247);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-wrap:normal" class=""><span class="" style="color:rgb(167,29,93)">Type</span> AType { <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">foo</span>() { <span class="" style="color:rgb(167,29,93)">...</span> } }</pre></div>Module 2:<div class="" style="background-color:transparent;color:rgb(51,51,51);font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:14px;margin-bottom:0px!important;overflow:visible!important"><pre style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;margin-top:0px;margin-bottom:0px;line-height:1.45;padding:16px;overflow:auto;background-color:rgb(247,247,247);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-wrap:normal" class=""><span class="" style="color:rgb(167,29,93)">import</span> <span class="" style="color:rgb(0,134,179)">Module1</span>
<span class="" style="color:rgb(167,29,93)">protocol</span> A { <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">foo</span>() {<span class="" style="color:rgb(167,29,93)">...</span><span class="" style="color:rgb(167,29,93)">default</span><span class="" style="color:rgb(167,29,93)">...</span>} }
<span class="" style="color:rgb(167,29,93)">extension</span> AType: A {}</pre></div><div class="gmail_extra"><div class="gmail_quote"><br class=""></div></div></div></div></blockquote><div><br class=""></div><div>No annotations. AType's implementation of foo is unrelated to its conformance, which is satisfied by its existing foo method.</div><div><br class=""></div></div></div></blockquote><div><br></div>How does this match the first line in your "Handling Changes" table?<div><br></div><div>(from your table, for reference)</div><div>Original: &nbsp;Some &nbsp;member implemented in type</div><div>Change: &nbsp;Protocol adds that member</div><div>Outcome: &nbsp;Must add 'required' to type implementation or rename member to avoid conflict<br><br><blockquote type="cite"><div><div><blockquote type="cite" class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote">Also, for your <b class="">alternatives</b> section:</div><div class="gmail_quote"><br class=""></div><div class="gmail_quote"><pre style="font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;margin-top:0px;margin-bottom:0px;line-height:1.45;padding:16px;overflow:auto;background-color:rgb(247,247,247);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-wrap:normal;color:rgb(51,51,51)" class=""><span class="" style="color:rgb(167,29,93)">protocol</span> A { <span class="" style="color:rgb(167,29,93)">func</span> <span class="" style="color:rgb(121,93,163)">foo</span>() {<span class="" style="color:rgb(167,29,93)">...</span><span class="" style="color:rgb(167,29,93)">default</span><span class="" style="color:rgb(167,29,93)">...</span>} }
<span class="" style="color:rgb(167,29,93)">Type</span> AType: A {
    <span class="" style="color:rgb(167,29,93)">func</span> A<span class="" style="color:rgb(167,29,93)">.</span>foo() {<span class="" style="color:rgb(167,29,93)">...</span>replacement<span class="" style="color:rgb(167,29,93)">...</span>}
}</pre></div><div class="gmail_quote"><br class=""></div><div class="gmail_quote">I actually prefer this alternative, I think it fixes many issues.</div></div></div></blockquote><div><br class=""></div><div>Protocol default implementations do not yet exist. &nbsp;</div><div><br class=""></div><div>In this second, you're suggesting instead of doing "override required", you use a naming approach that ties the implementation the specific protocol. I'm not really won over by this approach:</div><div><br class=""></div><div>* It does clarify why the method is included</div><div>* It does not clarify that the method overrides an existing implementation.</div><div>* It could be more easily confused when members are required by multiple protocols.</div><div><br class=""></div><div>-- E</div><div><br class=""></div></div></div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div></blockquote></div></body></html>