【发布时间】:2018-01-17 17:21:21
【问题描述】:
最近观看的 CppCon 2017 视频:Boris Kolpackov “构建 C++ 模块” https://www.youtube.com/watch?v=E8EbDcLQAoc
大约在 31:35,他开始解释我们仍应使用标头/源拆分并显示 3 个原因。第一个原因:
如果您在触摸此模块时将两个声明/定义放在同一个位置,则所有其他依赖于 模块接口 (BMI) 的模块都将被重新编译。
而且我一点也不喜欢。听起来我们还处于 90 年代,编译器还不够聪明,无法看到与 BMI 相关的变化和与实现相关的变化的差异。正如我所看到的,编译器能够快速扫描每个模块并从中仅生成 BMI。如果 BMI 没有改变 - 不要重新编译依赖它的其他模块。
还是我错过了什么?
【问题讨论】:
-
这是一个完整的工具实现细节。大多数构建系统都很简单,并且依赖文件的时间戳来决定需要编译的内容。但这很容易得到改进,正如过去 10 年大家最喜欢的 C++ language extension 所证明的那样。
-
这将是实现细节,但如果它影响整个模块提案,那么它不是。前段时间我的印象是 C++ 模块看起来像 Java 或 C# 模块 - 每个模块 1 个文件。我期待停止使用标头/源拆分,因为我发现总是更改在不同文件的 2 个位置重复的函数参数非常烦人。
标签: c++ compilation c++-modules