我们现在是 2020 年,C++20 即将到来,还有期待已久的 C++ 模块功能。但是在看了一些关于 CppCon 的演讲后,我发现 C++ 模块的位置很奇怪,尤其是对于 Linux 包管理器(pacman、apt、emerge 等)。
据我所知,C++ 模块是
- 编译器依赖
- 您不能在 Clang 中使用由 GCC 构建的模块
- GCC 9.1 模块不适用于 GCC 9.2
- 您可以拥有同一模块的许多不同版本
- 只要它们不导出到同一范围内
- 如果依赖项更新,您需要重新构建模块
我的问题是,在所有滚动发布的发行版中,编译器一直在更新,用户可能有自己的编译器版本。目前可以只更新编译器或更新libstdc++
. 但是对于模块,似乎建议libstdc++
必须在编译器更新时进行更新。
当编译器更新时,包管理器将如何处理更新,例如 STL?我不认为为每个版本的编译器构建每个版本的 STL 模块是可行的。用户必须构建自己的 STL 模块也不是一个好主意。