<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div></div><div style="direction: inherit;"><br></div><div><br>On Apr 8, 2017, at 5:19 AM, Neil via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><span>I agreed with Charlie, but I think there’s another option. </span><br><span></span><br><span>The access control problems that both SE-0159 and SE-0169 are attempting to address can be resolved not by changing the definition of the existing access modifiers, but refocussing the use of extensions. </span><br><span></span><br><span>One such way would be to introduce a `partial` modifier. It would be similar to C#’s partial modifier. The proposed partial modifier would be purely additive and it would go a long way to mitigate the access control issues inherent in extension-oriented design. </span><br><span></span><br><span>The key characteristics of partial-oriented design would be:</span><br><span></span><br><span>- Partials would allow the splitting of implementations into multiple logical units without the same-file restriction.</span><br></div></blockquote><div style="direction: inherit;"><br></div><div style="direction: inherit;">I really like the idea of partial but it would need to be restricted to the same file. This would allow partial to just be a compile time feature which just zips up a type together. &nbsp;Another great feature would be that it could allow stored properties because it is only a compile time feature. Partial could be used to communicate to the user that this type has additional members and properties declared somewhere else in the file.&nbsp;</div><div style="direction: inherit;"><br></div><div style="direction: inherit;">+1 for file scope partial.&nbsp;</div><div style="direction: inherit;"><br></div><div style="direction: inherit;"><br></div><blockquote type="cite"><div><span>- Partial definitions of a type are restricted to same module. If you wish to add functionality to a type external to its defining module, use an extension. </span><br><span>- Partials would provide greater clarity between additive extension and the original implementation. </span><br><span>- Within a partial, private would be type-private. </span><br><span>- Within an extension, private would be scoped-private (the status quo). </span><br><span></span><br><span>I do see that the last two points may introduce some friction. Particularly because: </span><br><span></span><br><span>- Within a partial, fileprivate would be more restrictive than private. </span><br><span>- Within an extension, fileprivate would be less restrictive than private (the status quo). </span><br><span></span><br><span>However, I don’t see these as too challenging for educators or developers as they are differentiated by their top-level scope. </span><br><span></span><br><span></span><br><span>On 07/04/2017, 05:57, "Charlie Monroe via swift-evolution" &lt;<a href="mailto:swift-evolution-bounces@swift.org">swift-evolution-bounces@swift.org</a> on behalf of <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:</span><br><span></span><br><blockquote type="cite"><span>Simply as long as it's file-based, it's not a solution, it's just another attempt to satisfy some part of the community. I'm not saying that the current access levels are perfect, but I still believe the way to go is to either use submodules, and/or introducing the concept of "protected" members.</span><br></blockquote><span></span><br><span></span><br><span></span><br><span></span><br><span></span><br><span></span><br><span></span><br><span></span><br><span></span><br><span></span><br><span>_______________________________________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div></blockquote></body></html>