C++ Logo

sg15

Advanced search

Re: [Tooling] Modules naming

From: Ben Craig <ben.craig_at_[hidden]>
Date: Thu, 10 Jan 2019 21:44:31 +0000
The burden of proof here is really odd. For a moment, let's divorce it from modules, and pretend we are doing something like, I don't know, virtual functions. I want this separation because I think this same kind of back and forth could very well happen for other features, and not just modules.

A few vendors have experimental implementations of the virtual function TS. Someone in the tooling group comes back and says "virtual functions are hard to tool, here's some things that could be done that we think will make them easier to tool".

Is the burden on the tooling group to prove that virtual functions are hard to tool by having multiple tool vendors speak up? Is the burden on the virtual function paper authors to say "virtual functions are easy to tool, here's a general implementation strategy"? Should the tool vendors make a code base that uses virtual functions all over the place, then fall flat on their face when they say "look, I couldn't tool this!"

When people in EWG speak up and say "This is unimplementable / very expensive in my front end", we tend to give those voices a lot of weight, and we don't require them to try to implement it and fail before we listen to them. If tool vendors speak up in SG15 and say that a feature is untoolable / very expensive to tool, then I think we should listen. We should expect rationale and explanation, sure, but when saying "something is hard"... asking for implementations feels like it is asking to prove a negative.

> -----Original Message-----
> From: tooling-bounces_at_[hidden] <tooling-bounces_at_[hidden]> On
> Behalf Of JF Bastien
> Sent: Thursday, January 10, 2019 3:26 PM
> To: WG21 Tooling Study Group SG15 <tooling_at_[hidden]>
> Subject: Re: [Tooling] Modules naming
>
> On Thu, Jan 10, 2019 at 1:18 PM Corentin <corentin.jabot_at_[hidden]>
> wrote:
> >
> > It is a chicken and egg problem.
>
> I don't think you're answering the question I asked, but you are pointing out
> a problem: SG15 doesn't have a large modularized codebase. Why not focus
> efforts on creating one, so that SG15's efforts can be grounded in facts?
>
>
> > Integrating modules in build systems will be a tedious endeavor -
> > especially in meta build systems, and there is little incentive to do that
> before modules get merged.
> >
> > It would be rather inconvenient to realize modules are not reasonably
> consumed by build system _after_ the IS is published.
> >
> > While having large modularized projects and build systems would be nice,
> it's a luxury we don't seem to have.
>
> You can create one. Or you can take the luxury of talk and suggest
> restrictions to modules, without grounding that talk in facts. I'm saying that
> you want more than just talk.
>
>
> > And I think taking a long look at module toolability (both in term of current
> tools. and in term of the 10 years goals/hopes this group has for tooling) falls
> in SG15 purview.
>
> Totally agree, but you can't tool with talk. At least when it comes to
> C++, you need code.
>
>
> > While my own experience is limited, I trust this group has enough build
> system experience and knowledge to foresee eventual issues and correct for
> them.
> > We can also extrapolate from the well-known issue of headers name
> collision that exists and the guidelines that arose from that.
> >
> > It is important to be explicit about what we mean when we say
> > "implementation experience" when talking about modules because they
> exist at the border between language and tools and having compiler
> implementation experience isn't the whole story.
>
> When I say "implementation experience for modules" I mean: I have code, I
> compile it with a compiler. That's pretty much the whole story.
>
>
> > On Thu, 10 Jan 2019 at 21:39 JF Bastien <cxx_at_[hidden]> wrote:
> >>
> >> On Thu, Jan 10, 2019 at 11:52 AM Corentin <corentin.jabot_at_[hidden]>
> wrote:
> >> >
> >> > I suspect it will be a while (several years) before we start to see large
> projects transitioning fully to modules and consumed as such by tools doing
> automatic dependency scanning etc.
> >> > My understanding is that there is little large scale implementation
> experience as far as tooling and build systems are concerned ( there is plenty
> _compilers_ implementation experience, and some build system
> implementation (and usage of modules) experience - mostly in build2).
> >>
> >> Given your statement above, why is it useful for SG15 to discuss
> >> enforcing mapping? Specifically, how will that discussion be grounded
> >> in facts? It seems to me like facts need a compiler implementation,
> >> and a codebase to try it out on. Feel free to talk about
> >> hypotheticals all you want, but in this case code wins.
> >>
> >> I think you want to refocus your approach: what are you trying to
> >> achieve? What's the advantage that SG15 has, which the modules SG and
> >> now EWG don't have? How can SG15 contribute module's success?
> >>
> >>
> >> > On Thu, 10 Jan 2019 at 18:47 JF Bastien <cxx_at_[hidden]> wrote:
> >> >>
> >> >> On Thu, Jan 10, 2019 at 6:53 AM Corentin <corentin.jabot_at_[hidden]>
> wrote:
> >> >> >
> >> >> > Hello.
> >> >> > I would like to suggest two modules related proposals that I think
> SG15 should look at.
> >> >> >
> >> >> > - Compiler enforced mapping between module names and module
> interface file (resource) name.
> >> >>
> >> >> Why does SG15 need to do this, versus someone implementing it in
> >> >> an open-source toolchain, trying it out, and bringing what using
> >> >> it taught them to SG15?
> >> >>
> >> >>
> >> >> > Currently, modules interfaces can be declared in any file -
> >> >> > which makes dependency scanning more tedious than it needs to be
> and have performance implications (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.
> >> >> >
> >> >> > Tools ( ide, code servers, indexers, refactoring) may also greatly
> benefit from an easier way to locate the source file which declares a module.
> >> >> >
> >> >> > 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> (The
> >> >> > standardese would mention resource identifier rather than
> >> >> > filename)
> >> >> >
> >> >> > - A standing document giving guidelines for modules naming.
> >> >> >
> >> >> > 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 that could be partially enforced by
> build system vendors.
> >> >> > Encouraging consistency and uniqueness of module identifiers across
> the industry is I think a necessary step towards sane package management.
> >> >> > 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.
> >> >> >
> >> >> > 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.
> >> >> >
> >> >> > 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.
> >> >> > 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.
> >> >> > Do not export multiple top-level namespaces Do not export
> >> >> > entities in the global namespace outside of the global module
> fragment.
> >> >> > Organize modules hierarchically. For example, if both modules
> >> >> > example.foo and example.foo.bar exist as part of the public API of
> example, example.foo should reexport example.foo.bar Avoid common
> names such as util and core for module name prefix and top-level
> namespace names.
> >> >> > Use lower-case module names
> >> >> > Do not use characters outside of the basic source character set in
> module name identifiers.
> >> >> >
> >> >> > 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 while making possible for example to design dependency managers
> and build systems able to work at the module level.
> >> >> >
> >> >> > I'd love to gather feedback and opinions before going further in that
> direction.
> >> >> > Thanks a lot!
> >> >> >
> >> >> > Corentin
> >> >> >
> >> >> > PS: For a bit of background, I talked about these issues there
> >> >> >
> >> >> > https://urldefense.proofpoint.com/v2/url?u=https-3A__cor3ntin.gi
> >> >> > thub.io_posts_modules-
> 5Fmapping_&d=DwICAg&c=I_0YwoKy7z5LMTVdyO6Y
> >> >> > CiE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-
> UCZRX0Vl1g&m=hMdurx12QnMc4
> >> >> > rrDSK4XTl2B3Qk5VTInV5_Jn-
> lgmiw&s=WeZePnnvj73tSzNJ3nbNnx0QI9-fxix
> >> >> > i7CmtkLJO1NA&e=
> >> >> > https://urldefense.proofpoint.com/v2/url?u=https-3A__cor3ntin.gi
> >> >> > thub.io_posts_modules-
> 5Fnaming_&d=DwICAg&c=I_0YwoKy7z5LMTVdyO6YC
> >> >> > iE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-
> UCZRX0Vl1g&m=hMdurx12QnMc4r
> >> >> > rDSK4XTl2B3Qk5VTInV5_Jn-lgmiw&s=jbOUo-
> g0h9lNE0MyXp3MI2f6T1cd7fbe
> >> >> > yZ-tG257ykI&e=
> >> >> >
> >> >> >
> >> >> > _______________________________________________
> >> >> > Tooling mailing list
> >> >> > Tooling_at_[hidden]
> >> >> > https://urldefense.proofpoint.com/v2/url?u=http-3A__www.open-
> 2Ds
> >> >> >
> td.org_mailman_listinfo_tooling&d=DwICAg&c=I_0YwoKy7z5LMTVdyO6YC
> >> >> > iE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-
> UCZRX0Vl1g&m=hMdurx12QnMc4r
> >> >> > rDSK4XTl2B3Qk5VTInV5_Jn-lgmiw&s=fLNQujc8-
> yoRZ7Z8e3S8VhGdB8ygZw-q
> >> >> > IcplYwoQMQo&e=
> >> >> _______________________________________________
> >> >> Tooling mailing list
> >> >> Tooling_at_[hidden]
> >> >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.open-
> 2Dstd
> >> >>
> .org_mailman_listinfo_tooling&d=DwICAg&c=I_0YwoKy7z5LMTVdyO6YCiE2u
> >> >> zI1jjZZuIPelcSjixA&r=y8mub81SfUi-
> UCZRX0Vl1g&m=hMdurx12QnMc4rrDSK4X
> >> >> Tl2B3Qk5VTInV5_Jn-lgmiw&s=fLNQujc8-yoRZ7Z8e3S8VhGdB8ygZw-
> qIcplYwoQ
> >> >> MQo&e=
> >> >
> >> > _______________________________________________
> >> > Tooling mailing list
> >> > Tooling_at_[hidden]
> >> > https://urldefense.proofpoint.com/v2/url?u=http-3A__www.open-
> 2Dstd.
> >> >
> org_mailman_listinfo_tooling&d=DwICAg&c=I_0YwoKy7z5LMTVdyO6YCiE2uz
> I
> >> > 1jjZZuIPelcSjixA&r=y8mub81SfUi-
> UCZRX0Vl1g&m=hMdurx12QnMc4rrDSK4XTl2
> >> > B3Qk5VTInV5_Jn-lgmiw&s=fLNQujc8-yoRZ7Z8e3S8VhGdB8ygZw-
> qIcplYwoQMQo&
> >> > e=
> >> _______________________________________________
> >> Tooling mailing list
> >> Tooling_at_[hidden]
> >> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.open-
> 2Dstd.or
> >>
> g_mailman_listinfo_tooling&d=DwICAg&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1
> jjZ
> >> ZuIPelcSjixA&r=y8mub81SfUi-
> UCZRX0Vl1g&m=hMdurx12QnMc4rrDSK4XTl2B3Qk5V
> >> TInV5_Jn-lgmiw&s=fLNQujc8-yoRZ7Z8e3S8VhGdB8ygZw-
> qIcplYwoQMQo&e=
> >
> > _______________________________________________
> > Tooling mailing list
> > Tooling_at_[hidden]
> > https://urldefense.proofpoint.com/v2/url?u=http-3A__www.open-
> 2Dstd.org
> >
> _mailman_listinfo_tooling&d=DwICAg&c=I_0YwoKy7z5LMTVdyO6YCiE2uzI1jj
> ZZu
> > IPelcSjixA&r=y8mub81SfUi-
> UCZRX0Vl1g&m=hMdurx12QnMc4rrDSK4XTl2B3Qk5VTIn
> > V5_Jn-lgmiw&s=fLNQujc8-yoRZ7Z8e3S8VhGdB8ygZw-qIcplYwoQMQo&e=
> _______________________________________________
> Tooling mailing list
> Tooling_at_[hidden]
> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.open-
> 2Dstd.org_mailman_listinfo_tooling&d=DwICAg&c=I_0YwoKy7z5LMTVdyO6Y
> CiE2uzI1jjZZuIPelcSjixA&r=y8mub81SfUi-
> UCZRX0Vl1g&m=hMdurx12QnMc4rrDSK4XTl2B3Qk5VTInV5_Jn-
> lgmiw&s=fLNQujc8-yoRZ7Z8e3S8VhGdB8ygZw-qIcplYwoQMQo&e=

Received on 2019-01-10 22:44:42