IMHO this sounds more like portected access that is crippled to the same file. 
I've personally argued with large files (500-1500 lines of code) and to be 
honest, I've tried breaking those up into several files each focusing on some 
aspect of the class and often ran into issues that the methods were dependent 
on private members of the class that I did not want to make internal.

Seeing where the discussions go, I'd suggest eliminating fileprivate, private 
having the old behavior (file scoped) and introduce @protected annotation.

When a member is marked as @protected, it can be accessed only from the 
class/struct and its extensions. We can discuss access from subclasses.

15. 2. 2017 v 8:05, David Hart via swift-evolution <swift-evolution@swift.org>:

> 
> 
> 
> Sent from my iPhone
> On 15 Feb 2017, at 06:31, Chris Lattner <sa...@nondot.org> wrote:
> 
>> 
>>> On Feb 14, 2017, at 3:20 AM, David Hart <da...@hartbit.com> wrote:
>>> 
>>> 
>>> On 14 Feb 2017, at 09:25, Goffredo Marocchi <pana...@gmail.com> wrote:
>>> 
>>>> I disagree with that as well as I still think we are damaging the language 
>>>> each time we take a known concept (like access levels) and give new 
>>>> meanings to the same keywords. I still look baffled at the redefinition of 
>>>> do and the addition of repeat for example...
>>>> 
>>>> Private, the way it was before, was an admittedly curious take on how most 
>>>> languages mean by private and we have jumped through a lot of hoops to 
>>>> justify why we did not start with Java/C++/C# like access control and 
>>>> augmented it instead of redefining things, omitting others, and then 
>>>> constantly pulling the language left and right with not a lot of permanent 
>>>> consensus either way as this discussion and others before show.
>>> 
>>> It's a curious take, but it is a curious take is perfectly coherent with 
>>> Swift extensions. How else would you access private implementation details 
>>> from an extension? But putting it in the same file, instead of having to 
>>> resort to an internal access level.
>> 
>> Right.  Swift is its own language distinct from Java/C++/etc.  While it is 
>> intentionally designed to remain familiar (and thus reuses many keywords 
>> across the language family), it often does so with slightly different 
>> meaning / behavior.  Consider ‘throw’ for example.
>> 
>> Keeping with the spirit of Swift and staying consistent with its design, I 
>> see two plausible meanings for private:
>> 
>> Private could mean either:
>> 1) private to the file (Swift 2 semantics)
>> 2) accessible only to the current type/scope and to extensions to that type 
>> that are in the current file.
> 
> I think (2) is worth discussing. My 2 cents:
> 
> Pros
> • Solves a high percentage of use cases of fileprivate
> • Type-scope proponents retain some of the safety
> 
> Cons
> • Less straight forward to explain
> • Access to different type/scope in same file not possible anymore
> 
> Honestly, I'd be quite happy about this compromise. :)
> 
>> I don’t think we’ve ever evaluated and debated approach #2 systematically.
>> 
>> -Chris
>> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to