<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Attendees:<o:p></o:p></p>
<p class="MsoNormal">Ben Craig<o:p></o:p></p>
<p class="MsoNormal">Ben Boeckel<o:p></o:p></p>
<p class="MsoNormal">Gaby Dos Reis<o:p></o:p></p>
<p class="MsoNormal">JF Bastien<o:p></o:p></p>
<p class="MsoNormal">Luasz Menakiewicz<o:p></o:p></p>
<p class="MsoNormal">Mark Zeren<o:p></o:p></p>
<p class="MsoNormal">Nathan Sidwell<o:p></o:p></p>
<p class="MsoNormal">Olgaark (Microsoft)<o:p></o:p></p>
<p class="MsoNormal">Tom Honermann<o:p></o:p></p>
<p class="MsoNormal">Corentin Jabot<o:p></o:p></p>
<p class="MsoNormal">Blaikie<o:p></o:p></p>
<p class="MsoNormal">Richard Smith<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Presenting https://isocpp.org/files/papers/D1634R0.html<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Tom: What's the status quo on if we have a conflict?<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Nathan: Ill-formed, only when you try to import the wrong one<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Corentin: Build system can give diagnostics if you have two modules with the same name in the same dependency graph<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">GDR: You can have conflicts within an organization<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Nathan: We also have this collision problem with namespaces.&nbsp; That doesn't seem to be a problem that requires vendor specific namespaces.&nbsp; Why do we thing this will be a bigger problem with modules?<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Boeckel: One thing we do with our third party packages is mangle the packages.&nbsp; We change the names of the shared library and of the dynamic symbols.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Nathan: There must be some subtleties there<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Tom Honermann: Namespaces merge naturally<o:p></o:p></p>
<p class="MsoNormal">Ben Craig: You need a double colision (namespace and class names)<o:p></o:p></p>
<p class="MsoNormal">Mark Zeren: These collisons are a problem.&nbsp; Google allegedly has a registry for top level namespaces.&nbsp; VMWare probably needs one.<o:p></o:p></p>
<p class="MsoNormal">Sidwell: Would like to see that kind of rationale in the paper, to illustrate that it is a problem.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Tom: When we import a module, we need the unique file that corresponds to the module<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Gaby: Difference is that with namespaces, we get collision of members, and it can be subtle.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">From ben.boeckel to Everyone:&nbsp; 11:15 AM<o:p></o:p></p>
<p class="MsoNormal">https://github.com/mathstuf/cxx-modules-sandbox/blob/master/link-use-mask/CMakeLists.txt<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Nathan: There seem to be some mitigating strategies today, but we aren't describing today's mitigations.&nbsp; Why don't we already hit this problem with existing software.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">On most CPP projects, the dependency tree is shallow, so they mostly conflict with themself.&nbsp; At the namespace level, most projects use namespaces as a way to scope names.&nbsp; With headers you can rename the headers on disk to solve some uniquification
 problems.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Two libraries (simple and duplicate) which have a module m.&nbsp; Two executables that import m.&nbsp; First one found is it.&nbsp; Cmake could say that it sees two &quot;m&quot;s and error out.&nbsp; Only works when the same name module is visible in the same place.&nbsp;
 Two libraries that make a config module way down deep, that is going to be harder to diagnose.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Tom: Please switch from ASCII to basic source character set<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Corentin: Would be nice to have a way to map module names to file names at some point, and we are limited in what we can put in a file name.&nbsp; Limiting ourself to the basic character set helps that.&nbsp; We can also avoid some issues if we stick
 with lower case, particularly when sharing between Windows and Linux.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Gaby: Other languages have a mix of pascal case vs. lower case.&nbsp; I would like to be able to visually seperate module names from namespace names, which would argue for pascal case.&nbsp; I'm not sure if we want to force it, or if this is just
 a guideline.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Corentin: There is no enforcement, no language changes.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Gaby: For the TR, we are aiming for something that everyone would be using and doing.&nbsp; My organization is using a different scheme already, and I would like to avoid that if possible.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Tom: Are they different just because of the casing, or are they using characters outside of the basic character set?<o:p></o:p></p>
<p class="MsoNormal">Gaby: Just casing<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">JF: ASCII seems like an overly protective regression.<o:p></o:p></p>
<p class="MsoNormal">JF: I think we should try to fix some of the existing identifiers with unicode.&nbsp; We should fix C&#43;&#43; as a whole, and make modules follow that.&nbsp; I don't think we should race to the bottom and support only the lowest common denominator.&nbsp; We
 don't want to go back to the 8 character file length.&nbsp; Accept that on some file systems, the mapping will be difficult.&nbsp; What do git and SVN do<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Gaby: Agree.&nbsp; Misconceptions on Windows.&nbsp; Don't want to base what we are doing on Windows misconceptions.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">JF: We should guide people to names that don't clash.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Tom: I would not like to limit to ascii either.&nbsp; Would like to give an algorithm to let tools implement the mapping<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Corentin: Underlying filename, you can't rename it.&nbsp; You need to have the same mapping on each platform.&nbsp; Because of that, I think we should have a subset of characters.&nbsp; It's about understanding the filename and make sure that tools like
 cmake will be able to find and name the BMI appropriately.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Tom: Not sure why the source filename needs to be renamed.&nbsp; Doesn't need to be a correlation between bmi, source, and object name.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Corentin: Would like to make it possible to have a mapping between the module name and a source file name.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">From blaikie to Everyone:&nbsp; 11:34 AM<o:p></o:p></p>
<p class="MsoNormal">The compiler/build system could implement a name-&gt;filesystem name mapping if the filesystem has naming limitations.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Tom: Would be useful to implement a mapping algorithm (note taker: like punicode)<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Ben: Is there an expectation that if you have a foo.bar, that you also have a foo?<o:p></o:p></p>
<p class="MsoNormal">Corentin: No.&nbsp; If you have `google.abseil`, you don't need `google`.&nbsp; If you google.abseil.list, then google.abseil should also bring google.abseil.list.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Gaby: This has problems at scale.&nbsp; I could have a subgroup that conflicts with the bigger group.&nbsp; This introduces problems.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Tom: Should be with something like MISRA, and not the TR.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Corentin: We want this to make it easier to do dependency management at scale.&nbsp; Can't have name conflicts, as the whole world is your dependency graph.&nbsp; If you have a module name, you could have a global index of every module name that
 exists, and find the library / project where it is declared and automatically download that library.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Gaby: If you want the library downloaded with no input, then yes. In practice, you want input from the user.&nbsp; It's ok to have several repos competing to provide something and you have to choose them.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Corentin: If you have two third party libraries that both import a library named foo that you have a conflict that you have no control over.&nbsp; This is one of the reasons you need unique names.&nbsp; The number of dependencies you have can grow
 exponentially.&nbsp; It needs to not happen to begin with.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">From blaikie to Everyone:&nbsp; 11:48 AM<o:p></o:p></p>
<p class="MsoNormal">Even with unique module names - you still have the version problem. Your dependency A depends on X1, but dependency B depends on X2.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">From JF Bastien to Everyone:&nbsp; 11:50 AM<o:p></o:p></p>
<p class="MsoNormal">Did someone say &#8220;semantic versioning&#8221; yet? Because my BINGO card has it.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">From ben.boeckel to Everyone:&nbsp; 11:51 AM<o:p></o:p></p>
<p class="MsoNormal">symbol versioning on there too?<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Gaby: You get to choose in practice, because if you don't, you are in big trouble.&nbsp; There are things like licences that users have to pick.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Corentin: Renaming a module is a major breaking change<o:p></o:p></p>
</div>
</body>
</html>