[swift-evolution] SE-0025: Scoped Access Level, next steps

Joe Groff jgroff at apple.com
Mon Mar 14 22:51:59 CDT 2016


> On Mar 14, 2016, at 8:36 PM, Patrick Pijnappel via swift-evolution <swift-evolution at swift.org> wrote:
> 
> Another +1 for James' idea to use private(module), private(file), private:
> - It avoids ambiguity whether internal/private/local is more restrictive and replaces it with a single axis, public vs. private.
> - The two longer terms, private(module) and private(file), are the least used ones.
> - As mentioned by Joe, it admits clean extension to groupings between file and modules in the future (e.g. submodules).
> 
> The only question is (as Sean mentioned) how this combines with the syntax for setter access level, e.g. the current private(set). Options:
> - Unnamed 2nd argument, giving private(file), private(file, set), private(set).

We could conceivably reskin private(set) too. A lot of people complain it's "weird" as-is, for better or worse.

-Joe

> - Named 2nd argument, giving e.g. private(file), private(file, accessor: set), private(accessor: set). Less ambiguity but longer.
> - Not using multiple arguments, but that'd probably break consistency with the other unification efforts going on to make everything look like function calls.
> 
> 
> On Tue, Mar 15, 2016 at 1:42 PM, Sean Heber via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> Although really, why not just use “file” instead of “internal” since it won’t burn any keywords or cause any other conflicts as far as I know.
> 
> l8r
> Sean
> 
> 
> > On Mar 14, 2016, at 9:38 PM, Sean Heber <sean at fifthace.com <mailto:sean at fifthace.com>> wrote:
> >
> > I, too, prefer it to be more like this:
> >
> > public  // unchanged
> > module  // currently internal
> > internal  // currently private
> > private  // new hotness
> >
> > l8r
> > Sean
> >
> >
> >> On Mar 14, 2016, at 7:50 PM, Jo Albright via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> >>
> >> +1
> >>
> >> I like this a lot. Name ideas : enclosed, filelocal, fileonly, filelock, fileaccess, fileprivate, insidefile, inner. I also like Erica’s filebound & file fixed.
> >>
> >> By Erica’s suggestion about switching…
> >>
> >> - public
> >> - modular, modulelock, packaged  (module only)
> >> - internal (file only)
> >> - private
> >>
> >> Designer . Developer .  Nerd
> >> Jo Albright
> >>
> >>
> >>> On Mar 14, 2016, at 8:18 PM, Chris Lattner via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> >>>
> >>> Per Doug’s email, the core team agrees we should make a change here, but would like some bikeshedding to happen on the replacement name for private.
> >>>
> >>> To summarize the place we’d like to end up:
> >>>
> >>> - “public” -> symbol visible outside the current module.
> >>> - “internal” -> symbol visible within the current module.
> >>> - unknown -> symbol visible within the current file.
> >>> - “private” -> symbol visible within the current declaration (class, extension, etc).
> >>>
> >>> The rationale here is that this aligns Swift with common art seen in other languages, and that many people using private today don’t *want* visibility out of their current declaration.  It also encourages “extension oriented programming”, at least it will when some of the other restrictions on extensions are lifted.  We discussed dropping the third one entirely, but think it *is* a useful and important level of access control, and when/if we ever get the ability to write unit tests inside of the file that defines the functionality, they will be a nicer solution to @testable.
> >>>
> >>> The thing we need to know is what the spelling should be for the third one.  Off hand, perhaps:
> >>>
> >>> fileprivate
> >>> private(file)
> >>> internal(file)
> >>> fileaccessible
> >>> etc
> >>>
> >>> Some other thoughts on the choice:
> >>> - this will be a declaration modifier, so it will not “burn” a keyword.
> >>> - if will be a uniquely Swift thing, so there is virtue in it being a googlable keyword.
> >>>
> >>> Thoughts appreciated.
> >>>
> >>> -Chris
> >>>
> >>> _______________________________________________
> >>> swift-evolution mailing list
> >>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> >>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> >>
> >> _______________________________________________
> >> swift-evolution mailing list
> >> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> >> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> >
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160314/4168954f/attachment.html>


More information about the swift-evolution mailing list