<div dir="ltr"><div>The access level discussed in the proposal already hides the members from nested types. The goal is to make something completely hidden outside of the scope. (otherwise, it would be possible to get access to something by simply inserting a nested class and without modifying the original class or extension definition). We discussed it during the review. So it is already the most private, and the name matches the meaning.</div><div><br></div><div>One of the goals of the core team in the response was to preserve the terms of art. In that sense, public and private make the most sense, the other two (internal and what today is called private) are not universal.</div><div><br></div>&gt; think moving `private` to this new access control level because it&#39;s the most private one we currently have sets a bad precedent. If we add a fifth level in Swift 4 (say, one that hides the member from nested types), does that now become `private` and we need to come up with a new name for the fourth level? Will users ever be able to get used to what the keywords actually mean?<br></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Mar 16, 2016 at 7:01 PM Brent Royal-Gordon via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">&gt; Per Doug’s email, the core team agrees we should make a change here, but would like some bikeshedding to happen on the replacement name for private.<br>
&gt;<br>
&gt; To summarize the place we’d like to end up:<br>
&gt;<br>
&gt; - “public” -&gt; symbol visible outside the current module.<br>
&gt; - “internal” -&gt; symbol visible within the current module.<br>
&gt; - unknown -&gt; symbol visible within the current file.<br>
&gt; - “private” -&gt; symbol visible within the current declaration (class, extension, etc).<br>
<br>
I think moving `private` to this new access control level because it&#39;s the most private one we currently have sets a bad precedent. If we add a fifth level in Swift 4 (say, one that hides the member from nested types), does that now become `private` and we need to come up with a new name for the fourth level? Will users ever be able to get used to what the keywords actually mean?<br>
<br>
Rather than use relative terms, let&#39;s use absolute ones. An extreme, imperfect example of what I mean:<br>
<br>
* exported<br>
* module<br>
* file<br>
* scope<br>
<br>
Then if we add other access levels in the future, we don&#39;t have to worry about reshuffling the existing names, because they will all still be correct. We just have to come up with a good name for the new one.<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>