> On Oct 7, 2016, at 9:13 AM, David Hart via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> I started the topic, but I also believe like you that the fileprivate vs 
> private(file) discussion has already been thoroughly discussed and nothing 
> new has been brought up. That’s not what I want to discuss.
> 
> I instead want to share my experience using private and fileprivate since 
> release. Here are my thoughts:
> 
> We should start with the premise that the proposal has added a substantial 
> amount of complexity:
> It has added an extra modifier and access level to learn.
> It has complicated the access level rules with Inner types as mentioned in 
> the Complications with private types section of the proposal.
> I have seen many people (twitter, work, slack) be confused about the 
> difference between private and fileprivate at the global level. The answer is 
> none, which shows that both modifiers are not very orthogonal.
> Since release, I saw people prefer one over the other, as a matter of style. 
> They tend to always use fileprivate or always using private. In the latter 
> case, functions and properties get clumped in the same class scope instead of 
> be written through multiple extensions.
> I have the impression that the motivations for the proposal are much less 
> real in practice:
> The first motivation stated is: "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’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.
> The second motivation stated is: "It forces a one class per file structure, 
> which is very limiting." 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.
> 
> 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.
> 
> Thoughts?
> David.
> 


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.



Russ

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to