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 ++
- 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
- Możesz mieć wiele różnych wersji tego samego modułu
- Dopóki nie zostaną wyeksportowane do tego samego zakresu
- 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.
źródło
Odpowiedzi:
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
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 tę listę mailową.
źródło