So are folks saying remove the concept of file private and keep the new private behavior? ...or revert the whole thing? Also based on what do we really see an issue with the addition of fileprivate? It seems more theory then examples of problems in the discussions I have seen.<br><br>-Shawn<br><div class="gmail_quote"><div dir="ltr">On Fri, Oct 7, 2016 at 2:05 PM Zach Waldowski 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"><u class="gmail_msg"></u>




<div class="gmail_msg"><div style="font-family:Arial" class="gmail_msg">I third this sentiment. fileprivate is a nice idea and very clearly has its uses (which is why the proposal got traction in the first place), but when  combined with the other access levels, the language feature as a whole feels arbitrary. In practical use, files that I felt were nicely encapsulated and hiding implementation details are now a scattered mix of access levels, adding cognitive load and making the code look unorganized for having the gall to use extensions to split up functionality.<br class="gmail_msg"></div>
<div style="font-family:Arial" class="gmail_msg"><br class="gmail_msg"></div>
<div id="m_-5659942382089656358sig40804545" class="gmail_msg"><div class="m_-5659942382089656358signature gmail_msg"><span class="m_-5659942382089656358font gmail_msg" style="font-family:arial,sans-serif,sans-serif">Sincerely,</span><span class="m_-5659942382089656358font gmail_msg" style="font-family:arial,sans-serif,sans-serif"></span><br class="gmail_msg"></div>
<div class="m_-5659942382089656358signature gmail_msg"><span class="m_-5659942382089656358font gmail_msg" style="font-family:arial,sans-serif,sans-serif">  Zachary Waldowski</span><span class="m_-5659942382089656358font gmail_msg" style="font-family:arial,sans-serif,sans-serif"></span><br class="gmail_msg"></div>
<div class="m_-5659942382089656358signature gmail_msg"><span class="m_-5659942382089656358font gmail_msg" style="font-family:arial,sans-serif,sans-serif">  </span><a href="mailto:zach@waldowski.me" class="gmail_msg" target="_blank"><span class="m_-5659942382089656358font gmail_msg" style="font-family:arial,sans-serif,sans-serif">zach@waldowski.me</span></a><br class="gmail_msg"></div>
</div></div><div class="gmail_msg">
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg">On Fri, Oct 7, 2016, at 01:55 PM, Russ Bishop via swift-evolution wrote:<br class="gmail_msg"></div>
<blockquote type="cite" class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">On Oct 7, 2016, at 9:13 AM, David Hart via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br class="gmail_msg"></div>
<div style="font-family:Arial" class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg"><div style="word-wrap:break-word" class="gmail_msg"><div style="font-family:Arial" class="gmail_msg">I started the topic, but I also believe like you that the <b class="gmail_msg">fileprivate</b> vs <b class="gmail_msg">private(file)</b> discussion has already been thoroughly discussed and nothing new has been brought up. That’s not what I want to discuss.<br class="gmail_msg"></div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg">I instead want to share my experience using <b class="gmail_msg">private</b> and <b class="gmail_msg">fileprivate</b> since release. Here are my thoughts:<br class="gmail_msg"></div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg"><ol class="gmail_msg"><li class="gmail_msg">We should start with the premise that the proposal has added a substantial amount of complexity:<br class="gmail_msg"></li><ol class="gmail_msg"><li class="gmail_msg">It has added an extra modifier and access level to learn.<br class="gmail_msg"></li><li class="gmail_msg">It has complicated the access level rules with Inner types as mentioned in the <b class="gmail_msg">Complications with private types</b> section of the proposal.<br class="gmail_msg"></li><li class="gmail_msg">I have seen many people (twitter, work, slack) be confused about the difference between <b class="gmail_msg">private</b> and <b class="gmail_msg">fileprivate</b> at the global level. The answer is none, which shows that both modifiers are not very orthogonal.<br class="gmail_msg"></li><li class="gmail_msg">Since release, I saw people prefer one over the other, as a matter of style. They tend to always use <b class="gmail_msg">fileprivate</b> or always using <b class="gmail_msg">private</b>. In the latter case, functions and properties get clumped in the same class scope instead of be written through multiple extensions.<br class="gmail_msg"></li></ol><li class="gmail_msg">I have the impression that the motivations for the proposal are much less real in practice:<br class="gmail_msg"></li><ol class="gmail_msg"><li class="gmail_msg">The first motivation stated is: <i class="gmail_msg">&quot;It is not clear whether the implementation details are meant to be completely hidden or can be shared with some related code without the danger of misusing the APIs marked as private.”</i> I’ve found that to be fairly rare in practice because the implementation details only used to leak inside the same file, which greatly reduces the dangers.<br class="gmail_msg"></li><li class="gmail_msg">The second motivation stated is: <i class="gmail_msg">&quot;It forces a one class per file structure, which is very limiting.&quot; </i>First of all, this is partly false. I think it forces putting classes which share implementation details in the same file, which I don’t think is necessarily a bad thing.<br class="gmail_msg"></li></ol></ol><div class="gmail_msg"><br class="gmail_msg"></div>
</div>
<div class="gmail_msg">To summarise, it seems that the confusion the proposal brought over semantics and style are not worth the limited benefits that it brought. I’d be tempted to backtrack the proposal and re-introduce private as a file scoped access-level and deprecate fileprivate.<br class="gmail_msg"></div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg">Thoughts?<br class="gmail_msg"></div>
<div class="gmail_msg">David.<br class="gmail_msg"></div>
<div class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div>
</div>
</div>
</div>
</blockquote><div style="font-family:Arial" class="gmail_msg"><br class="gmail_msg"></div>
</div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg">I agree. The minor benefit that fileprivate brings is not worth the cognitive overhead it introduces. We should just admit it was a mistake and back it out. We can avoid source-breaking changes by making fileprivate a synonym for private and provide fixits/warnings for a release to give people a chance to move off it.<br class="gmail_msg"></div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg">Russ<br class="gmail_msg"></div>
<div style="font-family:Arial" class="gmail_msg"><br class="gmail_msg"></div>
<div class="gmail_msg"><u class="gmail_msg">_______________________________________________</u><br class="gmail_msg"></div>
<div class="gmail_msg">swift-evolution mailing list<br class="gmail_msg"></div>
<div class="gmail_msg"><a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg"></div>
<div class="gmail_msg"><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg"></div>
</blockquote><div style="font-family:Arial" class="gmail_msg"><br class="gmail_msg"></div>
</div>

_______________________________________________<br class="gmail_msg">
swift-evolution mailing list<br class="gmail_msg">
<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg">
</blockquote></div>