For me, -1 for two reasons:

- Mainly, it still encourages stuffing everything into one file. I don't claim 
that having a 50-line files is the goal, but neither is having 1500 lines of 
code within one file. With less complex types, you're mostly fine with 
private/fileprivate as they are. For more complex types, you want to split the 
type across a few files making it better readable and organized. This doesn't 
help.

- I feel this brings more confusion/rules to the private/fileprivate access 
control without actually solving issues I personally run into with Swift access 
control...


> On Apr 3, 2017, at 8:34 PM, Douglas Gregor via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Hello Swift Community,
> 
> In rejecting SE-0159 
> <https://github.com/apple/swift-evolution/blob/master/proposals/0159-fix-private-access-levels.md>,
>  the core team described a potential direction we would like to investigate 
> for “private” access control that admits a limited form of type-based access 
> control within files. The core team is seeking some discussion here and a 
> motivated volunteer to put together a proposal along these lines for review 
> in the Swift 4 time-frame (i.e., very soon). To be clear, the core team it’s 
> sure this is the right direction to go… but it appears promising and we would 
> *love* to be able to settle the access-control issue.
> 
> The design, specifically, is that a “private” member declared within a type 
> “X” or an extension thereof would be accessible from:
> 
>       * An extension of “X” in the same file
>       * The definition of “X”, if it occurs in the same file
>       * A nested type (or extension thereof) of one of the above that occurs 
> in the same file
> 
> This design has a number of apparent benefits:
>       + “private” becomes the right default for “less than whole module” 
> visibility, and aligns well with Swift coding style that divides a type’s 
> definition into a number of extensions.
>       + “fileprivate” remains for existing use cases, but now it’s use it 
> more rare, which has several advantages:
>               + It fits well with the "progressive disclosure” philosophy 
> behind Swift: you can use public/internal/private for a while before 
> encountering and having to learn about “fileprivate”   (note: we thought this 
> was going to be true of SE-0025 
> <https://github.com/apple/swift-evolution/blob/master/proposals/0025-scoped-access-level.md>,
>  but we were clearly wrong)
>               + When “fileprivate” occurs, it means there’s some interesting 
> coupling between different types in the same file. That makes fileprivate a 
> useful alert to the reader rather than, potentially, something that we 
> routinely use and overlook so that we can separate implementations into 
> extensions.
>       + “private” is more closely aligned with other programming languages 
> that use type-based access control, which can help programmers just coming to 
> Swift. When they reach for “private”, they’re likely to get something similar 
> to what they expect—with a little Swift twist due to Swift’s heavy use of 
> extensions.
>       + Loosening the access restrictions on “private” is unlikely to break 
> existing code.
> 
> There are likely some drawbacks:
>       - Developers using patterns that depend on the existing 
> lexically-scoped access control of “private” may find this new interpretation 
> of “private” to be insufficiently strict
>       - Swift’s access control would go from “entirely lexical” to “partly 
> lexical and partly type-based”, which can be viewed as being more complicated
> 
> Thoughts? Volunteer?
> 
>       - Doug
> _______________________________________________
> 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