> On 21 Mar 2017, at 02:26, Drew Crawford via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> I disagree quite strongly with the proposal.
> 
> First, the document draws conclusions without apparent supporting evidence, 
> e.g.
> 
> > Since the release of Swift 3, the access level change of SE–0025 was met 
> > with dissatisfaction by a substantial proportion of the general Swift 
> > community. Those changes can be viewed as actively harmful, the new 
> > requirement for syntax/API changes.
> What is “dissatisfaction by a substantial proportion of the general Swift 
> community”? How was this measured/determined?
> What was done to control for the population happy with SE-0025 who would e.g. 
> not be likely to take up pitchforks?
> Who argues these changes are “actively harmful” and where were they during 
> SE-0025?
> > subtly encourages overuse of scoped access control and discourages the more 
> > reasonable default
> Who claims that scoped access is “overused” and what is their argument for 
> doing so?
> Why is “fileprivate” the “more reasonable default”? In fact neither 
> fileprivate *nor* private are default (reasonable or not!). Internal is the 
> default. Nor does this proposal suggest we change that. So this seems a very 
> strange statement.
> > But is that distinction between private and fileprivate actively used by 
> > the larger community of Swift developers?
> Yes. To cite some evidence, here are codebases I actively maintain:
> 
> | codebase                                               | private # | 
> fileprivate # | ratio |
> 
> |--------------------------------------------------------|-----------|---------------|-------|
> 
> | "M" (proprietary)                                      | 486       | 249    
>        | 2x    |
> 
> | "N"(proprietary)                                       | 179       | 59     
>        | 3x    |
> 
> | NaOH https://code.sealedabstract.com/drewcrawford/NaOH | 15        | 1      
>        | 15x   |
> 
> | atbuild https://github.com/AnarchyTools/atbuild | 54        | 5             
> | 11x   |
> 
> So from my chair, not only is the distinction useful, but scoped access 
> control (private) is overwhelmingly (2-15x) more useful than fileprivate.
> 
> > And if it were used pervasively, would it be worth the cognitive load and 
> > complexity of keeping two very similar access levels in the language? This 
> > proposal argues that answer to both questions is no
> 
> This proposal does not make any later argument about “cognitive load” or 
> “complexity” I can identify.  Did the proposal get truncated?
> 
> What is stated (without evidence) is that "it is extremely common to use 
> several extensions within a file” and that use of “private” is annoying in 
> that case.  I now extend the above table
> 
> | codebase                                               | private # | 
> fileprivate # | ratio | # of extensions (>=3 extensions in file) |
> 
> |--------------------------------------------------------|-----------|---------------|-------|------------------------------------------|
> 
> | "M" (proprietary)                                      | 486       | 249    
>        | 2x    | 48                                       |
> 
> | "N"(proprietary)                                       | 179       | 59     
>        | 3x    | 84                                       |
> 
> | NaOH https://code.sealedabstract.com/drewcrawford/NaOH | 15        | 1      
>        | 15x   | 3                                        |
> 
> | atbuild https://github.com/AnarchyTools/atbuild | 54        | 5             
> | 11x   | 6                                        |
> 
> in order to demonstrate in my corner of Swift this is not “extremely common”, 
> and is actually less popular than language features the proposal alleges 
> aren’t used.
> 
> My point here is that **different people in different corners of the 
> community program Swift differently and use different styles**.  I can 
> definitely empathize with folks like the author who use extensions to group 
> functions and are annoyed that their favorite visibility modifier grew four 
> extra characters.  Perhaps we can come up with a keyword that is more succint.
> 
> However, that is no reason to take away features from working codebases.  A 
> scoped access modifier is perhaps my favorite feature in Swift 3.  Let’s not 
> throw stuff away because it adds extra characters to one programming style.
> 
> Finally, SE-0025 establishes clear motivation for the scoped access modifier:
> 
> > Currently, the only reliable way to hide implementation details of a class 
> > is to put the code in a separate file and mark it as private. This is not 
> > ideal for the following reasons:
> 
> > 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. If a file already has 
> > multiple classes, it is not clear if a particular API is meant to be hidden 
> > completely or can be shared with the other classes.
> 
> > It forces a one class per file structure, which is very limiting. Putting 
> > related APIs and/or related implementations in the same file helps ensure 
> > consistency and reduces the time to find a particular API or 
> > implementation. This does not mean that the classes in the same file need 
> > to share otherwise hidden APIs, but there is no way to express such 
> > sharability with the current access levels.
> 
Concerning the one-class-per-file argument, I would suggest this 
counter-argument: when working in large projects, I believe it's a good thing 
if the language encourages (forces is too strong a word for my taste) a one 
class per file structure, it's good practice. And in small projects, which can 
hold in a file or two, I don't think that scope-based private provides a 
worthwhile distinction.
> As far as I can see, the proposal does not actually address or acknowledge 
> these problems at all, but cheerfully returns us to them.  It would be a 
> mistake to deprecate this feature without examining at all why we introduced 
> it.  And realistically we need new solutions to those problems before 
> removing the existing one.
> 
> Drew
> 
> On March 20, 2017 at 6:54:55 PM, Douglas Gregor (dgre...@apple.com) wrote:
> 
> Hello Swift community,
> 
> The review of SE–0159 “Fix Private Access Levels” begins now and runs through 
> March 27, 2017. The proposal is available here:
> 
> https://github.com/apple/swift-evolution/blob/master/proposals/0159-fix-private-access-levels.md
>  Reviews are an important part of the Swift evolution process. All reviews 
> should be sent to the swift-evolution mailing list at
> 
> https://lists.swift.org/mailman/listinfo/swift-evolution or, if you would 
> like to keep your feedback private, directly to the review manager. When 
> replying, please try to keep the proposal link at the top of the message:
> 
> Proposal link:
> 
> https://github.com/apple/swift-evolution/blob/master/proposals/0159-fix-private-access-levels.md
>  Reply text Other replies What goes into a review?
> 
> The goal of the review process is to improve the proposal under review 
> through constructive criticism and, eventually, determine the direction of 
> Swift. When writing your review, here are some questions you might want to 
> answer in your review:
> 
> What is your evaluation of the proposal? Is the problem being addressed 
> significant enough to warrant a change to Swift? Does this proposal fit well 
> with the feel and direction of Swift? If you have used other languages or 
> libraries with a similar feature, how do you feel that this proposal compares 
> to those? How much effort did you put into your review? A glance, a quick 
> reading, or an in-depth study? More information about the Swift evolution 
> process is available at
> 
> https://github.com/apple/swift-evolution/blob/master/process.md Thank you,
> 
> -Doug
> 
> Review Manager
> 
> swift-evolution-announce mailing list swift-evolution-annou...@swift.org 
> https://lists.swift.org/mailman/listinfo/swift-evolution-announce
> 
> _______________________________________________
> 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