Wie würden Linux-Paketmanager mit C ++ 20-Modulen umgehen?


12

Wir sind jetzt im Jahr 2020 und C ++ 20 kommt zusammen mit der lang erwarteten Funktion der C ++ - Module. Aber nachdem ich ein paar Vorträge über CppCon gesehen habe, finde ich, dass C ++ - Module an einem seltsamen Ort sind, insbesondere für Linux-Paketmanager (pacman, apt, emer, etc ...)

Nach dem, was ich gelernt habe, sind C ++ - Module

  1. Compiler abhängig
    • Sie können kein von GCC in Clang erstelltes Modul verwenden
    • GCC 9.1-Module funktionieren unter GCC 9.2 nicht
  2. Sie können viele verschiedene Versionen desselben Moduls haben
    • Solange sie nicht in den gleichen Bereich exportiert werden
  3. Sie müssen ein Modul neu erstellen, wenn seine Abhängigkeiten aktualisiert werden

Mein Problem ist, dass in allen Rolling-Release-Distributionen Compiler ständig aktualisiert werden und der Benutzer möglicherweise einen eigenen Compiler-Build hat. Derzeit kann man einfach den Compiler aktualisieren oder auch aktualisieren libstdc++. Bei Modulen scheint es jedoch naheliegend libstdc++zu sein, aktualisiert zu werden, wenn der Compiler aktualisiert wird.

Wie würde der Paketmanager mit der Aktualisierung beispielsweise der STL umgehen, wenn der Compiler aktualisiert wird? Ich denke nicht, dass es möglich ist, jede Version des STL-Moduls für jede Version des Compilers zu erstellen. Der Benutzer muss auch kein eigenes STL-Modul erstellen.


1
" Sie können kein von GCC in Clang erstelltes Modul verwenden. " Sie können die kompilierten Ergebnisse eines von GCC in Clang erstellten Moduls nicht verwenden .
Nicol Bolas

1
Ich kann das Problem nicht verstehen. Es ist möglich, die vorkompilierten Moduldateien zu verteilen, dies ist jedoch kein Muss. Jeder Benutzer kann sie einmal für jeden Compiler / jede Version kompilieren und alles ist in Ordnung. Wenn das Distributionspaket diese vorkompilierten Dateien liefert, speichert es nur eine einzige Kompilierung, die wir derzeit bei jeder Kompilierung durchführen. Wo liegt der Vorteil, vorkompilierte Module zu liefern? Das Herunterladen / Installieren kann länger dauern als das einmalige Kompilieren.
Klaus

Was für eine Antwort stellen Sie sich vor, die keine reine Spekulation wäre?
n. 'Pronomen' m.

@Klaus Genau, es gibt keinen Vorteil. Die meisten Anwendungen sind jedoch in zwei Teile unterteilt. Eine Schnittstelle und die Kernbibliothek. So können Menschen direkt mit der Kernfunktionalität interagieren. Nehmen Sie zum Beispiel yosys. Es wird in libyosys und yosys gespuckt. Wenn libyosys Module für schnellere Builds verwendet, muss libyosys von jedem Benutzer erstellt werden. Effektiv jeden Paketmanager in AUR verwandeln oder auftauchen.
Mary Chang

@ n.'pronomen'm. Ich hatte gehofft, ein Paketmanager-Entwickler würde die Frage sehen und erklären, wie er das Problem löst.
Mary Chang

Antworten:


1

Derzeit (10.01.202020) wird das Modulsystem eher als projektinternes Merkmal als als Ersatz für die Header- / Lib-Verteilung betrachtet. Wie Leute aus der Clang-Community vorschlagen, haben weder Clang noch Gcc noch Microsoft dies geplant, obwohl es einen Vorschlag gibt, ein compilerunabhängiges AST-Formular zu erstellen. Also raten Sie mal

Sie können viele verschiedene Versionen desselben Moduls haben

ist richtig und wird noch einige Zeit still bleiben.

Als Aspekt der Paketverwaltungsplattform ist die Auflösung noch unbekannt, aber da das Modulsystem eher ein projektinternes Merkmal ist, ist der schlimmste Fall, dass der "Header / Lib" -Weg weiterhin stattfindet.

PS Ich denke , Stackoverflow ist kein guter Ort für Fragen wie diese, wenn Sie wirklich eine Antwort wünschen, fragen diese Mail - Liste.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.