> Fixing the "include hell" problem would be at the top of my list of
> wants as someone who cares about the performance of a large scale build
> system. I believe there was a C++ modules proposal on the standards
> track at one point. Not sure what it's status is beyond being an
> experimental feature in clang [1]. Of course, by the time all the major
> compilers support this and we're in a position to make use of it, large
> parts of m-c's C++ might be rewritten in Rust, so who knows.
>
> [1] http://clang.llvm.org/docs/Modules.html
The Standards Committee has a study group focusing on modules.
It met briefly last week. Doug Gregor, who's been working on
implementing modules in clang, shared a status update:
- Clang has a working implementation of modules for C and Objective-C,
which is shipping in Xcode 5.
- Implementing the feature in C++ is quite a bit more difficult,
because of things like having to reconcile template instantiations
from different modules (basically, a lot of the same problems that
made 'export' difficult). There is work in progress on a clang
implementation for C++, but it's not usable yet.
The latest version of the proposal looks fairly clean to me from a
user's point of view:
- Modules are simply header files. A file called a "module map"
identifies header files as being modules and gives them a name.
- To import a module, one writes
import modulename;
- From an implementation point of view, modules are just a pre-
parsed representation of a header file's contents. Clang's
work-in-progress implementation represents them as a
serialized AST, but other implementations are possible.
- Modules are parsed without any context. So, if one does
#define EVIL_MACRO
#include <header.h>
then EVIL_MACRO is defined while processing the contents of
<header.h>, but if one does
#define EVIL_MACRO
import header;
then EVIL_MACRO is not defined while building the module
'header'. Obviously this is something that needs to be
considered when porting header files to be modular, you
cannot just blindly replace all inclusions with module
imports.
Naturally, a lot of the details are still subject to change,
particularly about the mechanism for mapping module names to
header files, and about the syntax for importing a module.
In terms of timeframe, I don't think the Committee will
consider standardizing anything until there isn't a complete
implementation, especially in light of what happened with
'export'. So, I'm guessing C++17 at the earliest.
Botond
_______________________________________________
dev-platform mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-platform