<div dir="ltr"><div></div>





<p class="inbox-inbox-p1"><span class="inbox-inbox-s1"><span style="line-height:1.5">Forgive me for creating a new thread, I don&#39;t know how to reply to an archived discussion (I just registered to the mailing-list).</span></span></p><p class="inbox-inbox-p1"><span class="inbox-inbox-s1"><br></span></p><p class="inbox-inbox-p1"><span class="inbox-inbox-s1">&gt; On </span><span class="inbox-inbox-s2"><i>Wed Jun 15 15:09:52 CDT 2016, </i><b>Matthew Johnson</b> <a href="mailto:swift-evolution%40swift.org?Subject=Re:%20Re%3A%20%5Bswift-evolution%5D%20%5BDiscussion%5D%20A%20Problem%20With%20SE-0025%3F&amp;In-Reply-To=%3CBD9FE13B-87B0-4CFB-9745-6C2DF506FE79%40anandabits.com%3E"><span class="inbox-inbox-s3">matthew at anandabits.com</span></a></span><span class="inbox-inbox-s1"> wrote:</span></p>
<p class="inbox-inbox-p2"><span class="inbox-inbox-s2">&gt; There are two reasonable options here:<span class="inbox-inbox-Apple-converted-space"> </span></span></p>
<p class="inbox-inbox-p2"><span class="inbox-inbox-s2">&gt;<span class="inbox-inbox-Apple-converted-space"> </span></span></p>
<p class="inbox-inbox-p2"><span class="inbox-inbox-s2">&gt; 1. Allow both `private` and `fileprivate` at file scope despite the fact that they have the same meaning.<span class="inbox-inbox-Apple-converted-space">  </span>This is more consistent in the sense that we are not introducing a special case that arbitrarily prohibits an otherwise valid access modifier.<span class="inbox-inbox-Apple-converted-space">  </span>It also means that nothing needs to change for top level `private` declarations in existing code.</span></p>
<p class="inbox-inbox-p2"><span class="inbox-inbox-s2">&gt;<span class="inbox-inbox-Apple-converted-space"> </span></span></p>
<p class="inbox-inbox-p2"><span class="inbox-inbox-s2">&gt; 2. Prohibit `private` at file scope.<span class="inbox-inbox-Apple-converted-space">  </span>Given that it appears as if the behavior of `private` at file scope may not be intuitive and is equivalent to `fileprivate` it might be reasonable to just disallow it.<span class="inbox-inbox-Apple-converted-space">  </span>This would result in more consistent *code* (even if there needs to be a special case in the language).</span></p>
<p class="inbox-inbox-p2"><span class="inbox-inbox-s2">&gt;<span class="inbox-inbox-Apple-converted-space"> </span></span></p>
<p class="inbox-inbox-p2"><span class="inbox-inbox-s2">&gt; I don’t have a strong opinion on which option we choose.<span class="inbox-inbox-Apple-converted-space">  </span>But I do feel strongly that the semantics of `private` need to properly respect the scope in which the keyword is written and into which the associated declaration is introduced (rather than the scope *inside* the declaration it is attached to).</span></p>
<p class="inbox-inbox-p3">The way we are defining those makes `fileprivate` closer to `internal` than to `private`:</p><p class="inbox-inbox-p3">* `fileprivate` and `internal` have a predefined scope level (the file, the module)</p><p class="inbox-inbox-p3">* `private` has a scope level depending on where it is declared</p><p class="inbox-inbox-p3">It would be more consistent to:</p><p class="inbox-inbox-p3"><span style="line-height:1.5">a) either rename </span><span class="inbox-inbox-s2" style="line-height:1.5"></span><span style="line-height:1.5">`fileprivate` to </span><span style="line-height:1.5">`fileinternal`</span></p><p class="inbox-inbox-p3"><span style="line-height:1.5">b) either scoping `internal` keyword </span>explicitly<span style="line-height:1.5"> with a naming like `internal(module)`, `internal(file)`</span></p><p class="inbox-inbox-p3"><span style="line-height:1.5">With this in mind, I wouldn&#39;t choose solution 2 from </span><b style="line-height:1.5">Matthew</b><span style="line-height:1.5"> (prohibiting `private` at some scope level), I would choose solution 1, with room for renaming `</span><span style="line-height:1.5">fileinternal</span><span style="line-height:1.5">` in the future.</span></p><p class="inbox-inbox-p3"><span style="line-height:1.5"><br></span></p><p class="inbox-inbox-p3"><span style="line-height:1.5">-- Antoine Cœur</span></p></div>