Apple's Module proposal to replace headers for C-based languages [pdf]
While LLVM authors probably know best, I don't understand some of his criticisms on the "Inherently Non-Scalable" slide.  • M headers with N source ﬁles ->  M x N build cost

It's only MxN if there is no use of the "#ifndef _HEADER_H" workaround that he mentioned earlier.   Wouldn't adding a preprocessor directive like "#include_once " solve this?  Alternatively, these guards could be added to the headers themselves without changing the preprocessor.   This probably should be a parallel set of headers (#include ) to avoid breaking the rare cases that depend on multiple inclusions, but creating that set would be a simple mechanical translation.  • C++ templates exacerbate the problem

I'm mostly a C programmer, so I have no argument here.  • Precompiled headers are a terrible solution

Why is this?  It likely would break the ability of headers to be conditional on previous #define statement, but since the proposal does this anyway it doesn't seem insurmountable.  Along that lines, how does this proposal handle cases where one needs/wants conditional behavior in the header such as "#ifdef WINDOWS" or the like?  And is caching headers during the same compilation also "terrible"?