LinuxパッケージマネージャーはC ++ 20モジュールをどのように処理しますか?


12

現在2020年になり、待望のC ++モジュール機能とともにC ++ 20が登場します。しかし、CppConでのいくつかの講演を見た後、特にLinuxパッケージマネージャー(pacman、apt、emergeなど)の場合、C ++モジュールが奇妙な場所にあることがわかりました。

私が学んだことから、C ++モジュールは

  1. コンパイラ依存
    • ClangでGCCによってビルドされたモジュールを使用することはできません
    • GCC 9.1モジュールはGCC 9.2では機能しません
  2. 同じモジュールの多くの異なるバージョンを持つことができます
    • 同じスコープにエクスポートされない限り
  3. 依存関係が更新された場合、モジュールを再構築する必要があります

私の問題は、すべてのローリングリリースディストリビューションで、コンパイラーが常に更新され、ユーザーが独自のコンパイラービルドを持っている可能性があることです。現在、コンパイラを更新するか、を更新することもできlibstdc++ます。しかし、モジュールのlibstdc++場合、コンパイラーの更新時に更新する必要があることを示唆しているようです。

パッケージマネージャーは、コンパイラーの更新時にSTLなどの更新をどのように処理しますか?コンパイラのすべてのバージョンに対してSTLモジュールのすべてのバージョンを構築することは現実的ではないと思います。また、ユーザーが独自のSTLモジュールを構築する必要はありません。


1
" ClangでGCCによってビルドされたモジュールを使用することはできません" ClangでGCCによってビルドされたモジュールコンパイル結果を使用することはできません。
Nicol Bolas

1
問題がわからない。プリコンパイルされたモジュールファイルを配布することは可能ですが、必須ではありません。すべてのユーザーは、コンパイラ/バージョンごとに1回コンパイルできます。ディストリビューションパッケージがそのプリコンパイル済みファイルを配信する場合、現在すべてのコンパイルで実行する1つのコンパイルのみが保存されます。プリコンパイルされたモジュールを提供する利点はどこにありますか?ダウンロード/インストールは、コンパイルに1回時間がかかる場合があります。
クラウス

純粋な推測ではない、どのようなアナワーを想定していますか?
n。「代名詞」m。

@クラウスまったく、メリットはありません。しかし、ほとんどのアプリケーションは2つの部分に分かれています。インターフェイスとコアlib。したがって、人々はコア機能と直接対話することができます。たとえば、yosysを見てみましょう。それはlibyosysとyosysに吐き出されます。libyosysがビルドを高速化するためにモジュールを使用する場合、各ユーザーがlibyosysをビルドする必要があります。すべてのパッケージマネージャーを効果的にAURに変換する、または出現させる。
メアリーチャン

@n。 '代名詞' m。パッケージマネージャーの開発者が質問を見て、どのように問題を解決しているかを説明してほしいと思っていました。
メアリーチャン

回答:


1

現時点では(2020年1月10日)、モジュールシステムは、ヘッダー/ライブラリディストリビューションの置き換えではなく、プロジェクト内部の機能と見なされています。Clangコミュニティの人が示唆するように、コンパイラーに依存しないASTフォームを作成する提案はありますが、ClangもGccもMicrosoftもこれを行う計画はありません。だからあなたは推測する

同じモジュールの多くの異なるバージョンを持つことができます

正しいですし、しばらく静止します。

パッケージ管理プラットフォームの側面として、解決策はまだ不明ですが、モジュールシステムはよりプロジェクト内の機能であるため、最悪の場合、「ヘッダー/ライブラリー」の方法が引き続き実行されます。

PSこのような質問には、stackoverflowは適さないと思います。本当に回答が必要な場合は、このメーリングリストに質問しください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.