<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><style>body{font-family:Helvetica,Arial;font-size:13px}</style></head><body style="-ms-word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div><div style="font-family: Calibri,sans-serif; font-size: 11pt;">Adrian, I myself don't see a reason other than "Objective-C never had it so why bother about it now?" Most (if not all) .net languages support optional namespaces and even PHP began supporting it in version 5 (if I'm not sure if the version is right). No technical reason against and I'm particularly in favour too so let's hear the others in the group.</div></div><div dir="ltr"><hr><span style="font-family: Calibri,sans-serif; font-size: 11pt; font-weight: bold;">From: </span><span style="font-family: Calibri,sans-serif; font-size: 11pt;"><a href="mailto:swift-evolution@swift.org">Adrian Zubarev via swift-evolution</a></span><br><span style="font-family: Calibri,sans-serif; font-size: 11pt; font-weight: bold;">Sent: </span><span style="font-family: Calibri,sans-serif; font-size: 11pt;">‎20/‎05/‎2016 09:16 AM</span><br><span style="font-family: Calibri,sans-serif; font-size: 11pt; font-weight: bold;">To: </span><span style="font-family: Calibri,sans-serif; font-size: 11pt;"><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a></span><br><span style="font-family: Calibri,sans-serif; font-size: 11pt; font-weight: bold;">Subject: </span><span style="font-family: Calibri,sans-serif; font-size: 11pt;">[swift-evolution] [Discussion] Namespaces</span><br><br></div><div id="bloop_customfont" style="margin: 0px; color: rgba(0, 0, 0, 1); font-family: Helvetica,Arial; font-size: 13px;">I want to revive this topic.</div><div id="bloop_customfont" style="margin: 0px; color: rgba(0, 0, 0, 1); font-family: Helvetica,Arial; font-size: 13px;"><br></div><div id="bloop_customfont" style="margin: 0px; color: rgba(0, 0, 0, 1); font-family: Helvetica,Arial; font-size: 13px;">Is there any technical reason why we can’t have namespaces in Swift? I’ve found just a few threads about namespaces, but most of them had arguments to use modules instead.</div><div id="bloop_customfont" style="margin: 0px; color: rgba(0, 0, 0, 1); font-family: Helvetica,Arial; font-size: 13px;"><br></div><div id="bloop_customfont" style="margin: 0px; color: rgba(0, 0, 0, 1); font-family: Helvetica,Arial; font-size: 13px;">I’m fine with modules but they just don’t serve everything I would want to. I can’t enforce the developer to use the modules name if there is no naming conflict.</div><div id="bloop_customfont" style="margin: 0px; color: rgba(0, 0, 0, 1); font-family: Helvetica,Arial; font-size: 13px;"><br></div><div id="bloop_customfont" style="margin: 0px; color: rgba(0, 0, 0, 1); font-family: Helvetica,Arial; font-size: 13px;">I asked in the SwiftPM mail list for a easier Xcode integration of modules, but the response is exactly the opposite for using modules for namespaces (read below).</div><div id="bloop_customfont" style="margin: 0px; color: rgba(0, 0, 0, 1); font-family: Helvetica,Arial; font-size: 13px;"><br></div><div id="bloop_customfont" style="margin: 0px; color: rgba(0, 0, 0, 1); font-family: Helvetica,Arial; font-size: 13px;">If I’m building one huge project I don’t want to build a lot of different modules just shiny namespaces and clean code.</div><div id="bloop_customfont" style="margin: 0px; color: rgba(0, 0, 0, 1); font-family: Helvetica,Arial; font-size: 13px;"><br></div><div id="bloop_customfont" style="margin: 0px; color: rgba(0, 0, 0, 1); font-family: Helvetica,Arial; font-size: 13px;">So I ask the community again why can’t we have optional namespaces?</div> <div class="bloop_sign" id="bloop_sign_1463745513731555072"><div style="font-family: helvetica,arial; font-size: 13px;">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div> <br><p class="airmail_on">Am 19. Mai 2016 bei 22:33:19, Daniel Dunbar (<a href="mailto:daniel_dunbar@apple.com">daniel_dunbar@apple.com</a>) schrieb:</p> <blockquote class="clean_bq" type="cite"><span><div style="-ms-word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div></div><div>



<title></title>


<div>Right now modules are most appropriately used at the
same granularity that frameworks or shared libraries would be used
in C/Obj-C/C++. This is the situation for which the variety of
access control modifiers in Swift and things like Whole Module
Optimization were designed for. While there are a lot of reasons to
like modules as a way to provide namespaces, they really haven't
been designed to provide these very fine grained namespaces.</div>
<div><br></div>
<div>My guess is that the right answer here doesn't really
involve the Xcode integration, but rather figuring out the right
way that these concepts fit into the language in a first class way.
I would expect concepts like submodules or namespaces to be
language concepts that Xcode just exposes, not something that was
coupled together.</div>
<div><br></div>
<div>&nbsp;- Daniel</div>
<div><br>
<div>
<blockquote type="cite">
<div>On May 18, 2016, at 12:37 PM, Adrian Zubarev via
swift-build-dev &lt;<a href="mailto:swift-build-dev@swift.org">swift-build-dev@swift.org</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<div>
<h1 style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: -webkit-standard; font-style: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;"><span style="font-family: Helvetica, Arial; font-size: 13px; font-weight: normal;">I’d like to discuss an idea that will make development in
Xcode easier. I assume that SwiftPM will see its Xcode integration
when the final version will be released.</span></h1>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">Problem I’ll try to describe is mostly about namespaces.
Right now some people abuses enums, struct or classes to create a
namespace for a specific need.</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;"><br></div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">class Reference {</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">&nbsp; &nbsp; class String { … }</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">&nbsp; &nbsp; class Character {</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">&nbsp; &nbsp; &nbsp; &nbsp; enum Error { … }</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">&nbsp; &nbsp; }</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;"><br></div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">&nbsp; &nbsp; private init() {}</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">}</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;"><br></div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">This will create a pseudo namespace for the nested
types:</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;"><br></div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">* Reference.String</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">* Reference.Character</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">* Reference.Character.Error</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;"><br></div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">One could argue of using modules instead of abusing a
class here, which is a great argument.</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;"><br></div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">The problem that comes to my mind here is that we will
have to create subprojects inside our main project file and using
the references to them just to achieve that shiny namespace.</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">One could also use SwiftPM, which is awesome, but there is
a need to re-build the module if any changes have been done. As
soon as we’ll create some complex dependencies between different
modules this will get messy.</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;"><br></div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">Before posting here I asked Joe Groff if there is any
mailing list I can use to discuss my idea. He told me this might be
a good place, because I was referring to the package manager. Then
I’ve done my research to not create any redundant thread, but I
only found one topic about the integration of SwiftPM in
Xcode:<span class="Apple-converted-space">&nbsp;</span><a href="https://lists.swift.org/pipermail/swift-build-dev/Week-of-Mon-20160215/000272.html">https://lists.swift.org/pipermail/swift-build-dev/Week-of-Mon-20160215/000272.html</a></div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;"><br></div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">So here are my thoughts about a deeper integration of
SwiftPM here:</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;"><br></div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">- What if Xcode will introduce two new types of groups
(the folder color could be orange like Swift for example, or even
contain the bird icon).</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">- These groups are analogous to already existing group
types except they’ll represent Swift modules / packages</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">- Basically we’ll have a single project file with multiple
modules, where these modules should only exist inside that project
(this is my own need right now)</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">- Such a package / module group will have a configurable
utilities, where one could configure the modules</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">- This will reduce the re-building process, allow us to
keep everything (not only .a or we’ll be able to hide .a files and
just keep the sourcefiles inside such groups) inside a single
project,<span class="Apple-converted-space">&nbsp;</span><b>gain the shiny namespaces like above</b>, and make the file
management way easier&nbsp;</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">- This also should allow us create cross-dependencies if
there is a good need for that in our project</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;"><br></div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">+ MainProject</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">|</div>
<div style="text-transform: none; text-indent: 0px; letter-spacing: normal; font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-weight: normal; word-spacing: 0px; white-space: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px;">+—Reference (module)</div>
</div></blockquote></div></div></div></div></span></blockquote><br><div>[The entire original message is not included.]</div></body></html>