<div dir="ltr"><div>The problem with syntax of &quot;existential protocol&quot; and &quot;protocol&quot; is that the first should actually be default, and easier to write.<br></div><div><br></div><div>We should prefer static to dynamic. It is as if &quot;structs&quot; had to be declared as &quot;static class&quot;, or &quot;let&quot; variables as &quot;const var&quot;. Shorter keywords should be used for enforcing good practices.</div><div>Additionally, 95% of standard library protocols are actually &quot;existential protocols&quot;, or &quot;protocols&quot; in my notation.<br></div><div><br></div><div>Next, I don&#39;t know any language which has &quot;existential&quot; keyword. Moreover, &quot;existential types&quot; in Haskell mean means (roughly) &quot;type that can hold value of any instance of class with type erasure&quot;, and that is exactly what an interface is in Swift. So, I think that if we will add &quot;existential&quot; keyword, we would add it the other way: for dynamically dispatched types.</div><div><br></div><div>Some other suggestions (imagine a table):</div><div><br></div><div>statically dispatched - dynamically dispatched</div><div>protocol - interface</div><div>protocol - dynamic protocol</div><div>protocol - existential protocol</div><div>static protocol - dynamic protocol</div><div>trait - protocol</div><div>trait - interface</div><div><br></div><div>I also personally like the &quot;trait - protocol&quot; naming. Traits are used to be statically dispatched things in other languages, and protocols are dynamically dispatched things from Objective-C. Actually, I&#39;m satisfied with any pair unless dynamic protocols get shorter names.</div><div><br></div><div>P.S. I&#39;ll correct that Self issue, thanks!</div></div>