[cfe-dev] [Modules TS] Have the file formats been decided?
Mehdi Amini via cfe-dev
cfe-dev at lists.llvm.org
Sun Jan 22 09:13:36 PST 2017
> On Jan 22, 2017, at 2:54 AM, Stephen Kelly via cfe-dev <cfe-dev at lists.llvm.org> wrote:
>
> Manuel Klimek via cfe-dev wrote:
>
>>> * We rely on library authors knowing to do that (how would they find out,
>>> given that clang documentation doesn't recommend it?)
>>>
>>
>> This is going to become a priority going forward, but it hasn't been yet.
>> Specifically, we'll need to discuss this in more detail, and carefully
>> design it, optimally pulling in as many stakeholders as we can.
>
> I very much agree with you there!
>
> However another issue is that the Clang modules implementation is
> 'intermediate' in that it doesn't follow the TS syntax. It's not clear to me
> what 'standard modules' in Clang would look like in terms of what files
> users write, and what the buildsystem needs to invoke (The Microsoft
> implementation seems to require the user to write 'foo.ixx' files and
> generate '.ifc' files IIRC).
>
> So there may be two systems to carefully design, or maybe 'standard modules'
> in Clang will also rely on modulemaps (so the user will have to create those
> and .ixx files). It's all part of the design work you mention, so I'll look
> forward to that kickstarting. Please keep me in the loop.
>
>> * Library authors won't automatically name things consistently, so we will
>>> also get libraries with <name>lib.modulemap and lib<name>.modulemap and
>>> doubtless other variations.
>>>
>>
>> I'd have hoped most would call them name.modulemap
>
> I see :). Hope! I guess the design you mention above can either rely on that
> or not and make it important or not. It's hard to know whether it is
> important until the design work is done.
>
>> * It would be preferable to have the buildsystem hide that detail, if it
>>> must exist. That would be possible with cmake usage requirements, but
>>> most libraries don't install cmake config files, and consumers don't
>>> necessarily use cmake anyway. I guess other buildsystems would have a
>>> similar issue.
>>>
>>
>> Yep. Modules fundamentally change the C++ build, so I don't see a way that
>> wouldn't require putting support into build systems.
>
> Indeed, this is true of both 'clang modules' and 'standard modules'. In the
> case of the Microsoft implementation, an entire new step is required for
> each module (whereas often compile flags for the compile step and link flags
> for the link step are enough to build something, now there will be a
> 'generate modules' step which will need its own flags and need to be ordered
> correctly). It is not clear to me how much of that is also the case for the
> Clang implementation, and whether that will change if Clang supports
> 'standard modules' in the future.
>
> Given that such fundamental buildsystem support is required, I find it
> interesting that it is not part of the conversation about Modules. That's
> critical to adoption, right?
>
>> Both with autotools and cmake you usually call an installed function to
>> detect a library, which will give you the flags you need to compile it.
>> Those will need to change for a library wanting to be compiled as a
>> module.
>
> Yes, but as I wrote above, there will be an entirely new step (with the
> Microsoft implementation at least - I don't know about Clang) with new
> ordering requirements. Supplying different compile flags is not enough.
>
>> Build system support is needed. This is not very different from the
>> current state where many libraries you use require specific flags to
>> build.
>
> I don't know that that's true. Perhaps that will be obvious when the design
> work you mentioned above is done. If additional steps to the build are
> required, I might term that 'very different'.
>
> It's not clear to me how names of things will be relevant or will be
> determined. Will files have to be parsed by the buildsystem to determine the
> name of a module ('module M' syntax)? Is that realistic? From looking at
> lack of Fortan support in Ninja (IIUC Fortran has a module system which
> requires doing that) that would be problematic to the point of preventing
> adoption.
>
>> A final note: without build system integration and changes to your code
>> structure, modules are likely to make your incremental builds slower.
>> Apple has some experience here, see Daniel Dunbar's talk at the llvm dev
>> meeting.
>
> Link me please?
>
http://llvm.org/devmtg/2016-11/#talk10
And if you’re into build systems, I advise you this one as well:
http://llvm.org/devmtg/2016-11/#talk22 (Toy programming demo of a repository for statically compiled programs )
—
Mehdi
>> If you think non zero effort will make people not use them, then they'll
>> not use them. I don't think that's bad, it's an effort vs payout
>> trade-off.
>
> Oh, I don't know about non-zero effort. I'm interested in what the effort is
> and who will make it. That's not clear to me because as you say, it has not
> been designed yet.
>
> Thanks,
>
> Steve.
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
More information about the cfe-dev
mailing list