Мы находимся в 2020 году, и C ++ 20 идет вместе с долгожданной функцией модулей C ++. Но после просмотра нескольких выступлений на CppCon я обнаружил, что модули C ++ находятся в странном месте, особенно для менеджеров пакетов Linux (pacman, apt, emerge и т. Д.)
Из того, что я узнал, модули C ++
- Зависит от компилятора
- Вы не можете использовать модуль, созданный GCC в Clang
- Модули GCC 9.1 не будут работать на GCC 9.2
- Вы можете иметь много разных версий одного и того же модуля
- Пока они не экспортируются в одну и ту же область
- Вам нужно перестроить модуль, если обновятся его зависимости
Моя проблема в том, что во всех дистрибутивах с непрерывным выпуском компиляторы постоянно обновляются, и у пользователя может быть своя собственная компиляция. В настоящее время можно просто обновить компилятор или также обновить libstdc++
. Но с модулями, кажется libstdc++
, нужно обновлять при обновлении компилятора.
Как менеджер пакетов будет обрабатывать обновление, например, STL при обновлении компилятора? Я не думаю, что возможно создание каждой версии модуля STL для каждой версии компилятора. Также пользователю не нужно создавать собственный модуль STL.
Ответы:
На данный момент (январь / 10/2020) модульная система рассматривается скорее как внутренняя функция проекта, а не как замена заголовка / lib. Как предполагают ребята из сообщества Clang, хотя есть предложение создать независимую от компилятора форму AST, ни Clang, ни Gcc, ни Microsoft не планируют этого делать. Итак, вы догадываетесь о
прав и будет продолжать молчать некоторое время.
Что касается аспекта платформы управления пакетами, разрешение до сих пор неизвестно, но, поскольку модульная система является в большей степени внутренним компонентом проекта, в худшем случае все еще будет иметь место «header / lib».
PS Я думаю, что stackoverflow - не самое подходящее место для подобных вопросов. Если вы действительно хотите получить ответ, задайте этот список рассылки.
источник