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


12

我们到了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模块是一个好主意。


1
您不能使用CCC在Clang中构建的模块 ”“您不能使用GCC在Clang中构建的模块的编译结果
Nicol Bolas

1
我无法抓住问题。可以分发预编译的模块文件,但这不是必须的。每个用户每个编译器/版本都可以编译一次,一切都很好。如果发行版软件包提供了这些预编译的文件,则它仅保存一个当前我们在每个编译中都进行的编译。提供预编译模块的好处在哪里?下载/安装一次可能需要更长的时间。
克劳斯

您设想的是哪种猜测,这将不是纯粹的猜测?
n。代词

@Klaus确实,没有好处。但是大多数应用程序分为两部分。一个接口和核心库。因此人们可以直接与核心功能进行交互。以yosys为例。它被分裂为libyosys和yosys。如果libyosys决定使用模块进行更快的构建,则必须由每个用户来构建libyosys。有效地使每个包管理器变成AUR或出现。
Mary Chang

@n。'代词'。我希望软件包管理器开发人员可以看到问题并解释他们如何解决问题。
Mary Chang

Answers:


1

目前(2020年1月10日),模块系统被视为更多项目内部功能,而不是替换标题/库分发。正如Clang社区的人所建议的那样,尽管有人建议创建独立于编译器的AST表单,但Clang,Gcc和Microsoft都没有计划这样做。所以你猜

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

是正确的,并会保持一段时间。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.