On 16.02.2017 10:14, Goffredo Marocchi via swift-evolution wrote:
I think it would be a step back as it again oversimplifies access control
IMHO. If we touch access control we should aim to improve it from both a
library implementation point of view but for a user point of view as well.


+1. I can't understand the opinion that we must to "simplify" but not "improve". IMO access levels in languages like C# understandable by newbie very well. IMO there is nothing hard(not more than concept of Optional or generic type/protocol programming) to remember/understand 4-5 access levels. Especially, if newbie can start programming even don't know about access levels - as we have "internal" by default. But these access levels adds a real value for the programmer, when he/she can express intention better(even if there is just one coder!) and have compiler support.

IMO we need the ability to say "in subtype or in extension in the same *module*". Probably even just as "in the current file and in subtype or in extension in the same *module*". I do think this solves the many questions raised regarding limitations of current access modifiers.

Just as a variant:
* public -> outside of the module
* internal -> inside module
* private -> inside file
* protected(or other keyword) -> inside file + subtype&extensions in the same module

IMO very clear model. "private" is something that is personal, hidden and locked, nobody should touch this. "protected" - under protection, not for public, but in some situations access can be granted. In this case we have Swift2 simplicity of modifiers plus extra modifier that solves problems with code distribution in files and with sharing implementation details for subtypes/extensions in the same module. As I understand, no impact on ABI as 'protected' just for internals of module. No?


Sent from my iPhone

On 16 Feb 2017, at 06:20, Chris Lattner via swift-evolution
<swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:

On Feb 14, 2017, at 11:46 PM, Jean-Daniel via swift-evolution
<swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
Keeping with the spirit of Swift and staying consistent with its
design, I see two plausible meanings for private:

Private could mean either:
...
(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

Which means that if we choose 2, we must keep fileprivate.
Being able to access other type private members in the same file is an
important feature that can’t be easily replaced, so it would badely
break existing code if we remove it.

Yeah, I think you’re right, which sinks the whole idea: we should aim to
(re)simplify the access control model.  (2) is also problematic because
it doesn’t allow the private members to be used by other things in the
same file.  E.g. use a private member of Foo in an extension on String.

IMO, removing fileprivate and making private match Swift 2 semantics
seems like the more promising approach.

-Chris
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org <mailto: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

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to