<div dir="ltr">Yes, currently is hard to &quot;know for sure&quot; if you need for implement all requirements of the protocol. Usually I wait for compile to tell me.<div><br></div><div>Anyway, i think the protocols is more useful to model behaviour, and default implementation help with that. Its like multiple inheritance without the hard part.<br></div><div><br></div><div>So I&#39;m very concerned about putting &quot;a lot of stuffs&quot; on protocols, and bring the bad parts of multiple heritage.<br></div><div><br></div><div>Although my proposal, I believe protocols need to be extremely simple, and easy to use. And i&#39;m really think the storage properties can help with that. I&#39;m worried about the idea of people using/modeling protocols just as concrete types.<br></div><div><br></div><div>If this idea go ahead, it may be an opportunity to bring some clarity to the current scenario, but also prevent future abuses.<br></div><div><br></div><div>The main problem is (to me): What is really a Protocol Oriented Programing? I Saw Dave Abrahams presentations a few times, but the whole idea is not 100% clear. So it&#39;s hard to think of a design to help this concept.<br></div><div><br></div><div><br><div class="gmail_quote"><div dir="ltr">Em ter, 12 de jan de 2016 às 05:11, Brent Royal-Gordon via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; escreveu:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">&gt; An automatic approach brings hesitation to me, because I don’t want it to be the difference between:<br>
&gt;<br>
&gt; protocol P {<br>
&gt;  var x : Int { get }<br>
&gt; }<br>
&gt;<br>
&gt; and:<br>
&gt;<br>
&gt; protocol P {<br>
&gt;  var x : Int<br>
&gt; }<br>
&gt;<br>
&gt; Did I want a PwS there, or did I just forget {get/set}?<br>
<br>
If we&#39;re going to start adding concrete things to protocols—not just stored properties, but (drawing on other proposals) perhaps also default implementations, final members, factory initializers, etc.—perhaps we should start marking the things that *aren&#39;t* concrete with `required`.<br>
<br>
Currently:<br>
<br>
        public protocol Strideable : Comparable, _Strideable {<br>
            associatedtype Stride : SignedNumberType<br>
            @warn_unused_result<br>
            public func distanceTo(other: Self) -&gt; Self.Stride<br>
            @warn_unused_result<br>
            public func advancedBy(n: Self.Stride) -&gt; Self<br>
        }<br>
<br>
        extension Strideable {<br>
            @warn_unused_result<br>
            public func stride(to end: Self, by stride: Self.Stride) -&gt; StrideTo&lt;Self&gt; {<br>
                /* implementation here */<br>
            }<br>
        }<br>
<br>
        extension Strideable {<br>
            @warn_unused_result<br>
            public func stride(through end: Self, by stride: Self.Stride) -&gt; StrideThrough&lt;Self&gt; {<br>
                /* implementation here */<br>
            }<br>
        }<br>
<br>
Future:<br>
<br>
        public protocol Strideable : Comparable, _Strideable {<br>
            associatedtype Stride : SignedNumberType<br>
            @warn_unused_result<br>
            required public func distanceTo(other: Self) -&gt; Self.Stride<br>
            @warn_unused_result<br>
            required public func advancedBy(n: Self.Stride) -&gt; Self<br>
<br>
            @warn_unused_result<br>
            final public func stride(to end: Self, by stride: Self.Stride) -&gt; StrideTo&lt;Self&gt; {<br>
                /* implementation here */<br>
            }<br>
<br>
            @warn_unused_result<br>
            final public func stride(through end: Self, by stride: Self.Stride) -&gt; StrideThrough&lt;Self&gt; {<br>
                /* implementation here */<br>
            }<br>
        }<br>
<br>
--<br>
Brent Royal-Gordon<br>
Architechies<br>
<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div></div></div>