<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div><br><br>Sent from my iPad</div><div><br>On Mar 24, 2016, at 5:07 AM, Ilya Belenkiy 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><div style="white-space:pre-wrap">It's very consistent with other keywords. I wish compound keywords were joined with a dash or something that made them easier to read, but I guess it's too late now. If we have associatedtype, it makes sense to use moduleprivate (I saw that the name  associatedtype was discussed extensively but didn't participate in the discussion; I am sure that it was given a lot of thought). If we could change this, I'd suggest keyword names with dashes everywhere, but if not, these names work well and is a great compromise for everything I've seen in this thread.<br><br>I am not worried about the length because the 2 most frequently written keywords would be public and private. Moduleprivate is the default, and file private will not be used as often as private.<br><br>One question: should the proposal be explicit about access control for nested classes? We discussed it here briefly (I wanted private to be completely private to the class or extension itself while 2 other people wanted a nested class to have access to the outer class.)</div></div></blockquote><div><br></div><div>I don't think it would make sense at all to allow an outer type to see private members of a nested class. &nbsp;That would break the semantics of private meaning "containing scope".</div><div><br></div><div>However, with Chris's suggestion of using identifiers as parameters, maybe we could eventually have something like private(OuterTypeName) to specify the precise level of access desired.</div><br><blockquote type="cite"><div><br><div class="gmail_quote"><div dir="ltr">On Thu, Mar 24, 2016 at 1:13 AM Chris Lattner via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">&lt;responding to several posts in this thread at once&gt;<br>
<br>
On Mar 14, 2016, at 5:18 PM, Chris Lattner via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt; 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.<br>
<br>
What we do with private setters is orthogonal from this proposal, so I’m going to ignore it in this thread.&nbsp; After SE-0025 is resolved, it would be great to have another thread/proposal that discusses reskinning private(set) - presumably as just a modifier on the setter.<br>
<br>
Similarly, this proposal has nothing to do with “protected” or any other type based access control, so I don’t delve into that at all either.<br>
<br>
I’ve seen several proposals that seem promising:<br>
<br>
On Mar 14, 2016, at 5:49 PM, James Berry &lt;<a href="mailto:jberry@rogueorbit.com" target="_blank">jberry@rogueorbit.com</a>&gt; wrote:<br>
&gt; I like fileprivate, if that’s the only change. On the other hand, if we want to consider a broader change, what about:<br>
&gt;<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp;private&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;symbol visible within the current declaration (class, extension, etc).<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp;private(module) symbol visible within the current module.<br>
&gt;&nbsp; &nbsp; &nbsp; &nbsp;private(file)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;symbol visible within the current file.<br>
<br>
I love how this establishes a family with different levels of access control, and unites them under the idea of "levels of being private”.&nbsp; I also like how people would commonly only ever write public and private (because “private(module)” is the default, and "private(file)" is obscure).&nbsp; However, parenthesized modifiers that take a keyword (as opposed to an identifier) are a bit weird and awkward, so it would be nice to avoid them if possible.<br>
<br>
On Mar 15, 2016, at 3:39 AM, Thorsten Seitz via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt; public<br>
&gt; private-module<br>
&gt; private-file<br>
&gt; private<br>
<br>
This follows the same sort of structure as James’ proposal, without the parens.&nbsp; It has the same advantages, but trades them with hyphenated decl modifiers.&nbsp; We don’t do that, but it is a good direction.<br>
<br>
How about we continue this trend, and follow other existing Swift keywords that merge two lowercase words (associatedtype, typealias, etc), and use:<br>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; public<br>
&nbsp; &nbsp; &nbsp; &nbsp; moduleprivate<br>
&nbsp; &nbsp; &nbsp; &nbsp; fileprivate<br>
&nbsp; &nbsp; &nbsp; &nbsp; private<br>
<br>
The advantages, as I see them are:<br>
1) We keep public and private meaning the “right” and “obvious” things.<br>
2) The declmodifiers “read” correctly.<br>
3) The unusual ones (moduleprivate and fileprivate) don’t use the awkward parenthesized keyword approach.<br>
4) The unusual ones would be “googable”.<br>
5) Support for named submodules could be “dropped in” by putting the submodule name/path in parens: private(foo.bar.baz) or moduleprivate(foo.bar).&nbsp; Putting an identifier in the parens is much more natural than putting keywords in parens.<br>
<br>
What do you all think?<br>
<br>
-Chris<br>
<br>
<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div>
</div></blockquote><blockquote type="cite"><div><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>