<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Thu, 10 Jan 2019 at 23:17 Ben Craig <<a href="mailto:ben.craig@ni.com">ben.craig@ni.com</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div class="m_-9048898476447951958WordSection1">
<p class="MsoNormal">I’m not a fan of the MANIFEST / module map approach in general. It requires duplicating information that is already in the source. I get that it has the potential to speed up builds, but I’d rather not have to update another location
when I add a new .cpp file to my project. Many build systems allow for the user to make the tradeoff in whether they will use a file system glob to enumerate their source, or require the user to list the source manually. I usually fall into the file system
glob crowd.<u></u><u></u></p>
<p class="MsoNormal"><u></u></p></div></div></blockquote><div><br></div><div>+1 <br></div><div>I think the less files we have to describe the build, the easier to maintain it is.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div class="m_-9048898476447951958WordSection1"><p class="MsoNormal"> <u></u></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> <a href="mailto:tooling-bounces@open-std.org" target="_blank">tooling-bounces@open-std.org</a> <<a href="mailto:tooling-bounces@open-std.org" target="_blank">tooling-bounces@open-std.org</a>>
<b>On Behalf Of </b>Gabriel Dos Reis<br>
<b>Sent:</b> Thursday, January 10, 2019 3:15 PM</p></div></div></div></div></div><div lang="EN-US" link="blue" vlink="purple"><div class="m_-9048898476447951958WordSection1"><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><br>
<b>To:</b> WG21 Tooling Study Group SG15 <<a href="mailto:tooling@open-std.org" target="_blank">tooling@open-std.org</a>><br>
<b>Subject:</b> Re: [Tooling] Modules naming<u></u><u></u></p></div></div></div></div></div><div lang="EN-US" link="blue" vlink="purple"><div class="m_-9048898476447951958WordSection1"><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Microsoft strongly encourages its developers and customers to NOT tie a module name with the containing source file of its interface. This is based on decades of experience caused by header files. I would rather see us move in the direction
of some sort of MANIFEST file that map modules to source files and artifacts.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> <a href="mailto:tooling-bounces@open-std.org" target="_blank">tooling-bounces@open-std.org</a> <<a href="mailto:tooling-bounces@open-std.org" target="_blank">tooling-bounces@open-std.org</a>>
<b>On Behalf Of </b>Corentin<br>
<b>Sent:</b> Thursday, January 10, 2019 6:53 AM</p></div></div></div></div></div></div><div lang="EN-US" link="blue" vlink="purple"><div class="m_-9048898476447951958WordSection1"><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><br>
<b>To:</b> WG21 Tooling Study Group SG15 <<a href="mailto:tooling@open-std.org" target="_blank">tooling@open-std.org</a>><br>
</p></div></div></div></div></div></div><div lang="EN-US" link="blue" vlink="purple"><div class="m_-9048898476447951958WordSection1"><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b>Subject:</b> [Tooling] Modules naming<u></u><u></u></p>
</div>
</div></div></div></div></div><div lang="EN-US" link="blue" vlink="purple"><div class="m_-9048898476447951958WordSection1"><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hello.<u></u><u></u></p>
<div>
<p class="MsoNormal">I would like to suggest two modules related proposals that I think SG15 should look at.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">-<b> Compiler enforced mapping between module names and module interface file (resource) name. </b><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Currently, modules interfaces can be declared in any file - which makes dependency scanning more tedious than it needs to be and have performance implications<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">(The build system needs to open all files to gather a list of modules) - notably when the build system tries to start building while the dependency graph isn't yet complete.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Tools ( ide, code servers, indexers, refactoring) may also greatly benefit from an easier way to locate the source file which declares a module.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">The specifics of the mapping are open to bikeshedding. However, I think we would have better luck sticking to something simple like <module identifier> <=> <file name>.<extension><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">(The standardese would mention <i>resource identifier</i> rather than filename)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">- <b>A standing document giving guidelines for modules naming.</b><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">The goal is to take everything the community had to learn the hard way about header naming over the past 30 years and apply it to modules by providing a set of guidelines<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">that could be partially enforced by build system vendors.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Encouraging consistency and uniqueness of module identifiers across the industry is I think a necessary step towards sane package management.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Note that the standard requires uniqueness of modules identifiers within (the standard definition of) a program but says little about a way to ensure this uniqueness.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Here is a rough draft of what I think would be good guidelines, partially inspired by what is done by other languages facing similar issues.<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal" style="margin-right:24.0pt;margin-bottom:0in;margin-left:24.0pt;margin-bottom:.0001pt;vertical-align:baseline">
<u></u><span style="font-size:10.0pt;font-family:Symbol;color:#42464c"><span>·<span style="font:7.0pt "Times New Roman"">
</span></span></span><u></u><b><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#222324;border:none windowtext 1.0pt;padding:0in">Prefix module names with an entity and/or a project name to prevent modules from different companies, entities
and projects of declaring the same module names.</span></b><span style="font-family:"Arial",sans-serif;color:#42464c"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-right:24.0pt;margin-bottom:0in;margin-left:24.0pt;margin-bottom:.0001pt;vertical-align:baseline">
<u></u><span style="font-size:10.0pt;font-family:Symbol;color:#42464c"><span>·<span style="font:7.0pt "Times New Roman"">
</span></span></span><u></u><b><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#222324;border:none windowtext 1.0pt;padding:0in">Exported top-level namespaces should have a name identic to the project name used as part of the name of the
module(s) from which it is exported.</span></b><span style="font-family:"Arial",sans-serif;color:#42464c"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-right:24.0pt;margin-bottom:0in;margin-left:24.0pt;margin-bottom:.0001pt;vertical-align:baseline">
<u></u><span style="font-size:10.0pt;font-family:Symbol;color:#42464c"><span>·<span style="font:7.0pt "Times New Roman"">
</span></span></span><u></u><b><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#222324;border:none windowtext 1.0pt;padding:0in">Do not export multiple top-level namespaces</span></b><span style="font-family:"Arial",sans-serif;color:#42464c"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-right:24.0pt;margin-bottom:0in;margin-left:24.0pt;margin-bottom:.0001pt;vertical-align:baseline">
<u></u><span style="font-size:10.0pt;font-family:Symbol;color:#42464c"><span>·<span style="font:7.0pt "Times New Roman"">
</span></span></span><u></u><b><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#222324;border:none windowtext 1.0pt;padding:0in">Do not export entities in the global namespace outside of the global module fragment.</span></b><span style="font-family:"Arial",sans-serif;color:#42464c"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-right:24.0pt;margin-bottom:0in;margin-left:24.0pt;margin-bottom:.0001pt;vertical-align:baseline">
<u></u><span style="font-size:10.0pt;font-family:Symbol;color:#42464c"><span>·<span style="font:7.0pt "Times New Roman"">
</span></span></span><u></u><b><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#222324;border:none windowtext 1.0pt;padding:0in">Organize modules hierarchically.</span></b><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#42464c"> For
example, if both modules </span><code><span style="font-size:10.0pt;color:#42464c;border:none windowtext 1.0pt;padding:0in">example.foo</span></code><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#42464c"> and </span><code><span style="font-size:10.0pt;color:#42464c;border:none windowtext 1.0pt;padding:0in">example.foo.bar</span></code><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#42464c"> exist
as part of the public API of </span><code><span style="font-size:10.0pt;color:#42464c;border:none windowtext 1.0pt;padding:0in">example</span></code><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#42464c">, </span><code><span style="font-size:10.0pt;color:#42464c;border:none windowtext 1.0pt;padding:0in">example.foo</span></code><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#42464c"> should
reexport </span><code><span style="font-size:10.0pt;color:#42464c;border:none windowtext 1.0pt;padding:0in">example.foo.bar</span></code><span style="font-family:"Arial",sans-serif;color:#42464c"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-right:24.0pt;margin-bottom:0in;margin-left:24.0pt;margin-bottom:.0001pt;vertical-align:baseline">
<u></u><span style="font-size:10.0pt;font-family:Symbol;color:#42464c"><span>·<span style="font:7.0pt "Times New Roman"">
</span></span></span><u></u><b><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#222324;border:none windowtext 1.0pt;padding:0in">Avoid common names such as </span></b><code><span style="font-size:10.0pt;color:#222324;border:none windowtext 1.0pt;padding:0in">util</span></code><b><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#222324;border:none windowtext 1.0pt;padding:0in"> and </span></b><code><span style="font-size:10.0pt;color:#222324;border:none windowtext 1.0pt;padding:0in">core</span></code><b><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#222324;border:none windowtext 1.0pt;padding:0in"> for
module name prefix and top-level namespace names.</span></b><span style="font-family:"Arial",sans-serif;color:#42464c"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-right:24.0pt;margin-bottom:0in;margin-left:24.0pt;margin-bottom:.0001pt;vertical-align:baseline">
<u></u><span style="font-size:10.0pt;font-family:Symbol;color:#42464c"><span>·<span style="font:7.0pt "Times New Roman"">
</span></span></span><u></u><b><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#222324;border:none windowtext 1.0pt;padding:0in">Use lower-case module names</span></b><span style="font-family:"Arial",sans-serif;color:#42464c"><u></u><u></u></span></p>
<p class="MsoNormal" style="margin-right:24.0pt;margin-bottom:0in;margin-left:24.0pt;margin-bottom:.0001pt;vertical-align:baseline">
<u></u><span style="font-size:10.0pt;font-family:Symbol;color:#42464c"><span>·<span style="font:7.0pt "Times New Roman"">
</span></span></span><u></u><b><span style="font-size:7.5pt;font-family:"Arial",sans-serif;color:#222324;border:none windowtext 1.0pt;padding:0in">Do not use characters outside of the basic source character set in module name identifiers.</span></b><span style="font-family:"Arial",sans-serif;color:#42464c"><u></u><u></u></span></p>
</div>
</div>
<div>
<p class="MsoNormal">My hope is that these 2 proposals (whose impact on the standard is minimal) would make it easier for current tooling to deal with modules<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">while making possible for example to design dependency managers and build systems able to work at the module level.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I'd love to gather feedback and opinions before going further in that direction.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks a lot!<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Corentin<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">PS: For a bit of background, I talked about these issues there<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__nam06.safelinks.protection.outlook.com_-3Furl-3Dhttps-253A-252F-252Fcor3ntin.github.io-252Fposts-252Fmodules-5Fmapping-252F-26data-3D02-257C01-257Cgdr-2540microsoft.com-257C1139eb25a2ca43b5cb2e08d6770b6606-257C72f988bf86f141af91ab2d7cd011db47-257C1-257C0-257C636827288180838903-26sdata-3DRbCelyBe1YDW4eNJtYEgKkAeHGxvkhsYqzPk0wf3F58-253D-26reserved-3D0&d=DwMGaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-UCZRX0Vl1g&m=Yv6fjy4yWnfBkW_0m604prnwiQIO5K6DRLBHMjpiaxI&s=v7Z40T9WgivvxWUJ6plSphOw4d8bdvfEz9NAqCruKwE&e=" target="_blank">https://cor3ntin.github.io/posts/modules_mapping/</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__nam06.safelinks.protection.outlook.com_-3Furl-3Dhttps-253A-252F-252Fcor3ntin.github.io-252Fposts-252Fmodules-5Fnaming-252F-26data-3D02-257C01-257Cgdr-2540microsoft.com-257C1139eb25a2ca43b5cb2e08d6770b6606-257C72f988bf86f141af91ab2d7cd011db47-257C1-257C0-257C636827288180838903-26sdata-3DtMhQa4ijeqUd2qxXV4loP47nU5NESRTKJLwZqe-252FI1fc-253D-26reserved-3D0&d=DwMGaQ&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-UCZRX0Vl1g&m=Yv6fjy4yWnfBkW_0m604prnwiQIO5K6DRLBHMjpiaxI&s=O9uUoT3QItO0vkb2QTG-EnXjsGfOiq7t93GgFz4YHx8&e=" target="_blank">https://cor3ntin.github.io/posts/modules_naming/</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div></div></div></div><div lang="EN-US" link="blue" vlink="purple"><div class="m_-9048898476447951958WordSection1"><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"><div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt"></div>
</div>
</div>
</div>
_______________________________________________<br>
Tooling mailing list<br>
<a href="mailto:Tooling@isocpp.open-std.org" target="_blank">Tooling@isocpp.open-std.org</a><br>
<a href="http://www.open-std.org/mailman/listinfo/tooling" rel="noreferrer" target="_blank">http://www.open-std.org/mailman/listinfo/tooling</a><br>
</blockquote></div></div>