除了更简单的语法外,Go声称它只需导入一次依赖项,就能在很大程度上实现它的快速编译速度:
Go为所有文件导入依赖项一次,因此导入时间不会随项目大小呈指数增长。
如果你仔细设计,用C++能完成同样的事情吗?
例如,将所有包含添加到包含在所有文件中的单个包含文件(只使用一次pragma)? 或者,如果对任何头的任何更改都将重新编译所有内容,而不是增量编译,那么它会大大减慢它的速度吗?
我用的是LLVM。 还在设计项目。
通常一个项目由许多。cpp文件组成。 包含所有内容的。cpp文件是一个翻译单元(TU)。 它们分别编译,然后链接到可执行文件或DLL中。
您的解决方案将强制每个TU(不管其依赖关系有多小)都包含巨大的头文件。 它将被包含一次,但对项目中的每个。cpp文件都包含一次。
最有可能的是,它会使编译变得更慢。 更不用说这样的体系结构的所有问题了--维护这个代码库的健全将是痛苦的。
在您的问题中有一个洞察力--可能您想要的是预编译的头。 在某些情况下仔细使用它们可以缩短编译时间。
是的,通过仔细管理代码结构,在C++中大大减少构建时间是可能的。
实现这一点的一种方法是广泛使用前向声明。 有一个工具可以帮助实现这一点:包括你所使用的内容。
为了使其更有效,您还必须防止编译器在头文件中生成构造函数,析构函数和赋值运算符的默认实现。 因此,在头文件中声明它们,然后在各自的cpp中默认定义它们,可以帮助保持在头文件中声明的某些类向前。
加快构建时间的另一种方法是广泛使用依赖反转。 但这是任何语言的通则。