<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jul 6, 2016, at 2:13 PM, Leonardo Pessoa &lt;<a href="mailto:me@lmpessoa.com" class="">me@lmpessoa.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">You can also try and simplify your outlines reducing X.c and X.d to a<br class="">single entry as it is the same rule applied to two different elements<br class="">of the language. Using one single keyword (such as in 'open') would<br class="">make it clearer and that is why I prefer to have only one keyword.<br class=""><br class=""></div></div></blockquote><div><br class=""></div><div><div>I didn’t simply the outlines precisely because the proposal suggests two keywords.</div><div><br class=""></div><div>One keyword does solve this problem, but not the problem of conflation of finality and access control.</div><div>You end up with this matrix:</div><div><br class=""></div><div><font face="SFMono-Regular" class="">&nbsp; access &nbsp; &nbsp; &nbsp;| can override | final</font></div><div><font face="SFMono-Regular" class="">&nbsp;-------------+--------------+-------</font></div><div><font face="SFMono-Regular" class="">&nbsp;&nbsp;open &nbsp; &nbsp; &nbsp; &nbsp;| yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| Error - “class cannot be open and final"</font></div><div><font face="SFMono-Regular" class="">&nbsp; public &nbsp; &nbsp; &nbsp;| no &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | Error -&nbsp;“public class is already final by default"</font></div><div><font face="SFMono-Regular" class="">&nbsp; internal &nbsp; &nbsp;| yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| final</font></div><div><font face="SFMono-Regular" class="">&nbsp; fileprivate | yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| final</font></div><div><font face="SFMono-Regular" class="">&nbsp; private &nbsp; &nbsp; | yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| final</font></div><div><br class=""></div><div>This is way more confusing than the current language:</div><div><br class=""></div><div><div><font face="SFMono-Regular" class="">&nbsp; access &nbsp; &nbsp; &nbsp;| can override | final</font></div><div><font face="SFMono-Regular" class="">&nbsp;-------------+--------------+-------</font></div><div><span style="font-family: SFMono-Regular;" class="">&nbsp; public &nbsp; &nbsp; &nbsp;| yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| final</span></div><div><font face="SFMono-Regular" class="">&nbsp; internal &nbsp; &nbsp;| yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| final</font></div><div><font face="SFMono-Regular" class="">&nbsp; fileprivate | yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| final</font></div><div><font face="SFMono-Regular" class="">&nbsp; private &nbsp; &nbsp; | yes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| final</font></div><div class=""><br class=""></div><div class="">I strongly favor a programming language that doesn’t introduce compiler errors to solve problems that could be solved by cleaner syntax.</div><div class=""><br class=""></div><div class="">Since it’s already necessary to place the `public` keyword in front of every class, method, property, or subscript that you intend to make public, the developer is already thinking about the public API. Typing `public final` instead of `public` is an extra keyword, it’s not an extra cognitive burden since that cognition is already taking place.</div><div class=""><br class=""></div><div class="">Scott</div></div></div></div><br class=""></body></html>