<html><head><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div id="bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px; color: rgba(0,0,0,1.0); margin: 0px; line-height: auto;"><br></div> <br> <div id="bloop_sign_1490403889876158976" class="bloop_sign"></div> <br><p class="airmail_on">On March 24, 2017 at 7:53:09 PM, Jonathan Hull (<a href="mailto:jhull@gbis.com">jhull@gbis.com</a>) wrote:</p> <div><blockquote type="cite" class="clean_bq" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span><div><div style="color: rgb(0, 0, 0); font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">It isn’t the fact that there are multiple models, but they way those models interact with each other in the brain. &nbsp;You can actually have lots of different models without causing confusion, as long as the models fit well together. &nbsp;It also isn’t the number of access levels that is a problem. &nbsp;For example, you can have a ton of shirt sizes (XS, S, M, L, XL, XXL, 3XL) and it doesn’t cause more confusion as you add more sizes because they don’t conflict with one another.</div><div style="color: rgb(0, 0, 0); font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><br class=""></div><div style="color: rgb(0, 0, 0); font-family: 'helvetica Neue', helvetica; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">A big part of the issue with our current access scheme is how similar the concepts are without being the same. &nbsp;That is then made worse by the fact that they have been given similar names.</div></div></span></blockquote></div><p>It is unclear what distinction you intend to draw here. &nbsp;For example, value types and reference types are similar without being the same. &nbsp;The names of both concepts also contain the substring "type". &nbsp;So the difference you draw between that situation and the private/fileprivate situation is not immediately clear.</p><div><blockquote type="cite" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; padding-left: 5px; border-left-width: 1px !important; border-left-color: rgb(0, 64, 128) !important;">Note also that your list above is a list of typical stumbling blocks for new programmers in most languages. Swift has actually done a remarkable job with most of these through careful design of the way that they are framed / exposed to the programmer. &nbsp;In general, these things are well separated from each other.&nbsp;</blockquote></div><p>I do not think Swift has done even a *good* job framing these concepts. &nbsp;For example</p><p>protocol Foo {</p><p>&nbsp; &nbsp; func foo() { }</p><p>}</p><p>extension Foo {</p><p>&nbsp; &nbsp; func bar() {}</p><p>}</p><p>One of these is statically dispatched and the other one is dynamically dispatched. &nbsp;I would guess the vast majority of Swift developers are not aware there's a difference at all, let alone can explain why one is slower in a benchmark.</p><p>Swift is good at giving programmers flexibility in their tools. &nbsp;Here we have two superficially similar tools with slightly different features and performance characteristics, and for most problems it does not even matter which one you choose. &nbsp;IMO shipping a full toolbox with plenty of overlap is one of the core values of Swift.</p><p>I would suggest that the practicable reason we are talking about removing private/fileprivate instead of protocol/extension or reference/value is that while `extension` etc. makes your code more powerful, `private` makes it less powerful. &nbsp;It is not obvious to everyone why less power is desirable and so here we are.</p><div><blockquote type="cite" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; padding-left: 5px; border-left-width: 1px !important; border-left-color: rgb(0, 64, 128) !important;">Do you feel that allowing both scoped private &amp; file-based private is actually important enough to warrant the significant design work it would take to bring it up to par with these other features?&nbsp;</blockquote></div><p>It is not clear to me what design work is actually outstanding. &nbsp;I would love to see submodules, but that seems only indirectly related to visibility keywords, and I'm not aware of what you seem to believe we need.</p><p>I do use scoped access extensively, and I've left some examples of that upthread.</p><div><blockquote type="cite" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; padding-left: 5px; border-left-width: 1px !important; border-left-color: rgb(0, 64, 128) !important;">It is not impossible, but it really doesn’t feel worth the effort to me (say compared to using that time/energy/thought to check off features from the generics manifesto).</blockquote></div><p>Rather, as Carl Brown argued, it would take a lot of time/energy to migrate even the official projects off of private/fileprivate. &nbsp;Keeping what we have is free, change is what is expensive, and this proposal is change.</p><div><blockquote type="cite" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; padding-left: 5px; border-left-width: 1px !important; border-left-color: rgb(0, 64, 128) !important;">&nbsp;In general, Swift is an opinionated language</blockquote></div><p>Not clear what you mean here either. &nbsp;Swift is clearly less opinionated than ObjC for example. &nbsp;I am having trouble connecting this claim to a practical application.</p><div></div><div></div><div></div><div></div><div></div><div></div></body></html>