Jak menedżerowie pakietów Linuksa poradziliby sobie z modułami C ++ 20?

12

Jesteśmy w 2020 roku i nadchodzi C ++ 20 wraz z długo oczekiwaną funkcją modułów C ++. Ale po obejrzeniu kilku rozmów na temat CppCon stwierdzam, że moduły C ++ znajdują się w dziwnym miejscu, szczególnie dla menedżerów pakietów Linuksa (pacman, apt, emerge itp.)

Z tego, czego się nauczyłem, są moduły C ++

  1. Zależny od kompilatora
    • Nie możesz użyć modułu zbudowanego przez GCC w Clang
    • Moduły GCC 9.1 nie będą działać w GCC 9.2
  2. Możesz mieć wiele różnych wersji tego samego modułu
    • Dopóki nie zostaną wyeksportowane do tego samego zakresu
  3. Musisz odbudować moduł, jeśli zostaną zaktualizowane jego zależności

Mój problem polega na tym, że we wszystkich dystrybucjach z wydaniem kroczącym kompilatory są aktualizowane przez cały czas, a użytkownik może mieć własną kompilację. Obecnie można po prostu zaktualizować kompilator lub też zaktualizować libstdc++. Ale w przypadku modułów wydaje się, że sugeruje libstdc++konieczność aktualizacji podczas aktualizacji kompilatora.

Jak menedżer pakietów poradziłby sobie z aktualizacją, na przykład STL podczas aktualizacji kompilatora? Nie sądzę, aby zbudowanie każdej wersji modułu STL dla każdej wersji kompilatora było wykonalne. Również użytkownik nie musi budować własnego modułu STL.

Mary Chang
źródło
1
Nie możesz użyć modułu zbudowanego przez GCC w Clang ” Nie możesz użyć skompilowanych wyników modułu zbudowanego przez GCC w Clang.
Nicol Bolas,
1
Nie mogę złapać problemu. Możliwe jest rozpowszechnianie wstępnie skompilowanych plików modułów, ale nie jest to konieczne. Każdy użytkownik może skompilować je raz dla każdego kompilatora / wersji i wszystko jest w porządku. Jeśli pakiet dystrybucyjny dostarcza wstępnie skompilowane pliki, zapisuje tylko jedną kompilację, którą obecnie wykonujemy na każdym kompilacji. Gdzie jest korzyść z dostarczenia wstępnie skompilowanych modułów? Pobieranie / instalacja może potrwać dłużej jako kompilacja.
Klaus
Jakiego rodzaju anawer przewidujesz, co nie byłoby czystą spekulacją?
n. „zaimki” m.
@Klaus Dokładnie, nie ma korzyści. Ale większość aplikacji jest podzielona na 2 części. Interfejs i podstawowa biblioteka lib. Dzięki temu ludzie mogą bezpośrednio wchodzić w interakcje z podstawową funkcjonalnością. Weźmy na przykład yosys. Jest pluć na libyosys i yosys. Jeśli libyosys zdecyduje się użyć modułów do szybszych kompilacji, każdy użytkownik musi zbudować libyosys. Skutecznie zamieniaj każdego menedżera pakietów w AUR lub pojawi się.
Mary Chang,
@ n.'Pronouns'm. Miałem nadzieję, że deweloper menedżera pakietów zobaczy pytanie i wyjaśni, w jaki sposób rozwiązują problem.
Mary Chang,

Odpowiedzi:

1

Na razie (10 stycznia 2020 r.) System modułowy jest uważany raczej za cechę wewnętrzną projektu niż za zastąpienie dystrybucji nagłówka / biblioteki lib. Jak sugerują faceci ze społeczności Clang, chociaż istnieje propozycja utworzenia niezależnego od kompilatora formularza AST, ani Clang, ani Gcc, ani Microsoft nie planują tego zrobić. Więc zgadujesz

Możesz mieć wiele różnych wersji tego samego modułu

ma rację i pozostanie nieruchomo przez pewien czas.

Jako aspekt platformy zarządzania pakietami, rozdzielczość jest nadal nieznana, ale ponieważ system modułowy jest bardziej cechą wewnętrzną projektu, najgorszym przypadkiem jest to, że nadal będzie miał miejsce sposób „nagłówek / lib”.

PS Myślę, że stackoverflow nie jest dobrym miejscem na takie pytania, jeśli naprawdę chcesz uzyskać odpowiedź, poproś o listę mailową.

Ravenisadesk
źródło