<html><head></head><body>Please do not start a debate about `private(module)` which is equavalent to `internal`, otherwise you could equally use a parametrized `public` for everything.&nbsp;<div><br></div><div>public(outside_module), public(only_inside_module), public(only_in_this_file) or public(nowhere)</div><div><br></div><div>`internal` is just fine as it is.<br> <br><div class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div> <p class="gmail_quote" style="color:#000;">Am 25. März 2017 um 16:43:23, Matt Whiteside via swift-evolution (<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>) schrieb:</p> <blockquote type="cite" class="gmail_quote"><span><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div></div><div>



<title></title>


<br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Mar 23, 2017, at 18:35, Matthew Johnson via
swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div>
<div class="">
<div dir="auto" class="">
<div class=""><br class="">
On Mar 23, 2017, at 8:27 PM, Drew Crawford &lt;<a href="mailto:drew@sealedabstract.com" class="">drew@sealedabstract.com</a>&gt; wrote:<br class="">
<br class=""></div>
<blockquote type="cite" class="">
<div class="">

<div class=""><br class=""></div>
<div class="">The obvious example would be Rust. &nbsp;Rust has
exactly two visibilities, and merely one keyword. &nbsp;By default,
members are "private" which is visible inside the module (so, like
Swift's internal). The "public" keyword is similar to
Swift.&nbsp;</div>
<div class=""><br class=""></div>
<div class="">The reason this works is that unlike in Swift where a
module is something like a library or framework (Rust calls those
"crates"), in Rust modules in are (explicitly) lexically scoped; a
"mod myscope {}" module can be created for the portion of the file
for which the member should be visible and it won't be visible
outside that scope. Likewise, "fileprivate" can be achieved by
enclosing the file in a "mod MyFile {}". And like all lexical
scopes, they can be recursively nested to arbitrary depth to
achieve any number of visibility behaviors (e.g., declare a module
for the first half of two files) that would require complex new
keywords to achieve in Swift. <span style="background-color: rgba(255, 255, 255, 0);" class="">Finally there
are some shortcut features like the ability to infer a module
structure from the file system.&nbsp;</span></div>
</div>
</blockquote>
<div class=""><br class=""></div>
This is a good example of what I meant. &nbsp;There is an extremely
broad range of possible designs for submodules. &nbsp;Some of them,
such as this example, would make it relatively easy to get by
without fileprivate. &nbsp;There are also many other possible
designs that would not. &nbsp;</div>
</div>
</blockquote>
<br class=""></div>
<div>The Rust approach sounds ideal to me. &nbsp;I hope Swift can
get to this point some day.</div>
<div><br class=""></div>
<div>But as for the current proposal, I’ve become convinced that it
would cause headaches for too many people. &nbsp;Parametrizing the
private keyword seems a compromise between pragmatism and
elegance:</div>
<div><br class=""></div>
<div>public</div>
<div>private(module)</div>
<div>private(file)</div>
<div>private(scope)</div>
<div><br class=""></div>
<div>-Matt</div>


_______________________________________________<br>swift-evolution mailing list<br>swift-evolution@swift.org<br>https://lists.swift.org/mailman/listinfo/swift-evolution<br></div></div></span></blockquote>

</div></body></html>