Linux 包管理器将如何处理 C++20 模块?

Mar*_*ang 12 c++ dependency-management package-management c++20 c++-modules

现在是 2020 年,C++20 以及期待已久的 C++ 模块功能即将到来。但是在看了一些关于 CppCon 的演讲后,我发现 C++ 模块处于一个奇怪的地方,尤其是对于 Linux 包管理器(pacman、apt、emerge 等...)

据我所知,C++ 模块是

  1. 依赖编译器
    • 您不能在 Clang 中使用由 GCC 构建的模块
    • GCC 9.1 模块不适用于 GCC 9.2
  2. 您可以拥有同一模块的许多不同版本
    • 只要它们不导出到同一范围内
  3. 如果依赖项更新,您需要重建模块

我的问题是,在所有滚动发布发行版中,编译器一直在更新,用户可能有自己的编译器版本。目前可以只更新编译器或更新libstdc++. 但是对于模块,似乎建议libstdc++在编译器更新时必须更新。

当编译器更新时,包管理器将如何处理更新,例如 STL?我不认为为每个版本的编译器构建每个版本的 STL 模块是可行的。用户必须构建自己的 STL 模块也不是一个好主意。

小智 2

目前(2020 年 1 月 10 日),模块系统更多地被认为是项目内部功能,而不是头文件/lib 分发的替代品。正如 Clang 社区的成员所建议的,尽管有人建议创建一个独立于编译器的 AST 形式,但 Clang、Gcc 和 Microsoft 都没有计划这样做。所以你猜一下

您可以拥有同一模块的许多不同版本

是对的,并且会保持静止一段时间。

作为包管理平台方面,解决方案仍然未知,但由于模块系统更多的是项目内部的功能,最坏的情况是“header/lib”方式仍然会发生。

PS 我认为 stackoverflow 不是解决此类问题的好地方,如果您确实想要答案,请向邮件列表询问。