First post to Swift evolution, please bear with me: the following is a bit wild, but something to think about for the future, maybe.
Swift had three, and will now have four levels of scoping. In the future, might there be five? A scope that spans a limited set of modules, or a scope that only applies within a region of a declaration? Maybe scope modifiers should be something like: scope(all), scope(module), scope(file), scope(declaration). In other words, something that says it is a scope declaration, followed by a noun that names what the scope is. If additional scopes are needed in the future, it might be easier to add them. For instance, if there’s a way to name a collection of modules, there could be a scope(module-collection-name) modifier. Hope you enjoy this thought, - David > 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 [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
