<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Mar 24, 2017, at 6:07 AM, Goffredo Marocchi &lt;<a href="mailto:panajev@gmail.com" class="">panajev@gmail.com</a>&gt; wrote:</div><div class=""><div class="gmail_quote" style="font-family: Helvetica; font-size: 12px; 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;">On Fri, Mar 24, 2017 at 9:59 AM, Jonathan Hull via swift-evolution<span class="Apple-converted-space">&nbsp;</span><span dir="ltr" class="">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;</span><span class="Apple-converted-space">&nbsp;</span>wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><div style="word-wrap: break-word;" class=""><div class=""><br class=""></div>Several people have asked: &nbsp;What is the harm it causes?<div class=""><br class=""></div><div class="">I would like to provide a (hopefully) clear answer to that.</div><div class=""><br class=""></div><div class="">There are a couple of problems with the design which are causing Cognitive Dissonance:</div><div class=""><br class=""></div><div class="">1) Private &amp; fileprivate require very different mental models to operate them</div><div class="">2) They are named very similarly to each other</div><div class="">3) There is a third concept of “private to the type” which requires a third mental model, but is spelled the same way in other languages&nbsp;</div><div class=""><br class=""></div><div class="">Any one of these would cause confusion.&nbsp; All of them together mean that even those of us who understand how they work are bothered by them on a subconscious level (similar to how misaligned graphics will give everyone a subconscious feeling that a graphic design is “off” even if they can’t discern why consciously).&nbsp; Even many of those who are arguing to keep private have argued to rename things or to make it work in a more type-based way by extending visibility to extensions.&nbsp; I don’t think anyone is denying there is a problem here with the status quo.</div><div class=""><br class=""></div><div class="">There is a general rule in design that things that look similar (or in this case are named similarly) need to behave similarly to avoid causing confusion (and conversely things that behave differently *need* to look different).</div><div class=""><br class=""></div><div class="">**This is not something that will go away simply by learning the behavior.&nbsp; It will continue to be a rough spot in the language that causes discomfort until the underlying design issue is fixed.**</div><div class=""><br class=""></div><div class="">The ideal solution here would be to choose a single model and make everything coherent under that.&nbsp; We choose either file-based, scope-based, or type-based access control and unify under that.</div></div></blockquote><div class=""><br class=""></div><div class="">Why would this be the ideal solution? I tend to disagree and I do not think there is real agreement or even anything approaching consensus that it would be ideal... it feels quite restrictive.</div></div></div></blockquote></div><div class=""><br class=""></div><div class="">My goal was to explain the cognitive psychology of why this is an issue so we can work together on solving the underlying causes (as opposed to making random changes until something feels right)</div><br class=""><div class="">As I said above, the names are not the only issue causing the problem. &nbsp;It is how the concepts interact in your brain. &nbsp;They are locally consistent, but globally inconsistent. Basically, you look at one of them, and it makes sense, but when you try to consider both of them at once, it doesn’t quite fit. &nbsp;The fact that it is close makes it worse, because your brain wants to make it fit (just as it keeps trying and failing with the optical illusion I posted that has the same issue). &nbsp;The end result is that it causes cognitive dissonance, or a subconscious uneasy feeling caused by two incompatible mental models.</div><div class=""><br class=""></div><div class="">It isn’t just a naming or education issue. &nbsp;That is why, when we were bikeshedding names, we couldn’t find any set of names that felt right. &nbsp;Solving only issue 2 by renaming them to be different would still help a little, but it isn’t ideal because it only solves one of the underlying issues.</div><div class=""><br class=""></div><div class="">The reason picking one model and declaring it the winner is ideal, is that it gets rid of the actual cause of our problem. &nbsp;</div><div class=""><br class=""></div><div class="">Even with this proposal, we would still have some negative transfer from other languages (expecting ‘private’ to behave based on how it has been experienced in other languages). Luckily, negative transfer is something that can be solved with training/education… even if it means learning is more difficult. We could potentially get rid of all 3 issues by getting rid of the word ‘private’ entirely as well, and calling fileprivate ‘local’ or something like that. &nbsp;Local would have the connotation that things nearby could see it.</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Jon</div><div class=""><br class=""></div></body></html>