I've been following up C++ standardization and came across C++ modules idea. I could not find a good article on it. What exactly is it about?
4 回答
C++ 模块是允许编译器使用“语义导入”而不是旧的文本包含模型的提议。当找到#include 预处理器指令时,它们不会执行复制和粘贴,而是读取包含表示代码的抽象语法树的序列化的二进制文件。
这些语义导入避免了头文件中包含的代码的多次重新编译,从而加快了编译速度。例如,如果您的项目在不同的 .cpp 文件中包含 100#include
个<iostream>
.cpp 文件,则每个语言配置的标头只会被解析一次,而不是每个使用该模块的翻译单元解析一次。
微软的提议超越了这一点,并引入了internal
关键字。具有internal
可见性的类的成员不会在模块之外看到,因此允许类实现者对类隐藏实现细节。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4465.pdf
我在我的博客中写了一个小例子<iostream>
,使用 LLVM 的模块缓存:
https ://cppisland.wordpress.com/2015/09/13/6/
请看一下我喜欢的这个简单的例子。那里的模块解释得很好。作者使用简单的术语和很好的例子来检查问题的各个方面,如文章中所述。
这是第一个命题之一: http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1778.pdf
还有一个很好的解释: http ://clang.llvm.org/docs/Modules.html