<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></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 Feb 29, 2016, at 8:08 PM, Ilya Belenkiy &lt;<a href="mailto:ilya.belenkiy@gmail.com" class="">ilya.belenkiy@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;" class=""><br class="Apple-interchange-newline">This is one interoperation. Here is another that makes it fit perfectly well:</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;" class=""><br class=""></div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;" class="">- public: exports symbol to all files</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;" class="">- internal: exports symbol to module files</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;" class="">- private: exports symbol to one file containing the scope</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: 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;" class="">- scoped: no export</div></div></blockquote></div><br class=""><div class="">I disagree. The conceptual model is file scoping.</div><div class=""><br class=""></div><div class=""><ul class="MailOutline"><li class="">`public` - available in any source file within the module and in external source files that link the module</li><li class="">`internal` - available in any source file within the module</li><li class="">`private` - available in its own source file</li></ul><div class=""><br class=""></div></div><div class="">The addition of `local` adds a new conceptual model around access control: lexical scoping. This type of scoping also actively works against various Swift patterns that are fairly common: using extensions to implement protocol conformance.</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><font face="Menlo" class="">struct TypeA {<br class="">&nbsp; &nbsp;&nbsp;var&nbsp;a:&nbsp;String<br class="">}<br class=""><br class="">extension&nbsp;TypeA&nbsp;:&nbsp;StringLiteralConvertible&nbsp;{<br class="">&nbsp; &nbsp;&nbsp;init(stringLiteral value:&nbsp;String) {<br class="">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;self.a&nbsp;= value<br class="">&nbsp; &nbsp;&nbsp;}<br class="">&nbsp; &nbsp;&nbsp;<br class="">&nbsp; &nbsp;&nbsp;init(extendedGraphemeClusterLiteral value:&nbsp;String) {<br class="">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font><span style="font-family: Menlo;" class="">self</span><span style="font-family: Menlo;" class="">.a</span><font face="Menlo" class="">&nbsp;= value<br class="">&nbsp; &nbsp;&nbsp;}<br class="">&nbsp; &nbsp;&nbsp;<br class="">&nbsp; &nbsp;&nbsp;init(unicodeScalarLiteral value:&nbsp;String) {<br class="">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font><span style="font-family: Menlo;" class="">self</span><span style="font-family: Menlo;" class="">.a</span><font face="Menlo" class="">&nbsp;= value<br class="">&nbsp; &nbsp;&nbsp;}<br class="">}<br class=""><br class=""></font></blockquote><div class="">When `a` on type `TypeA` is declared as `local`, this pattern is no longer possible. Thus I find the use cases for `local`, as presented in the proposal, extremely limited in real use cases.&nbsp;</div><div class=""><br class=""></div><div class="">Now, if the proposal was to have `local` be scoped to the type that defines it, thus allowing extensions access to it, then it becomes more interesting, and has many more applicable use cases while still allowing the use case defined in the proposal.</div><div class=""><br class=""></div><div class="">-David</div><div class=""><br class=""></div></body></html>