Як менеджери пакунків Linux оброблять модулі C ++ 20?


12

Зараз ми в 2020 році, і C ++ 20 приходить разом із довгоочікуваною функцією модулів C ++. Але переглянувши кілька розмов про CppCon, я виявив, що модулі C ++ знаходяться в дивному місці, особливо для менеджерів пакетів Linux (pacman, apt, emerge тощо).

З того, що я дізнався, є модулі C ++

  1. Компілятор залежить
    • Ви не можете використовувати модуль, побудований GCC в Clang
    • Модулі GCC 9.1 не працюватимуть на GCC 9.2
  2. Ви можете мати багато різних версій одного модуля
    • Поки вони не експортуються в однакові обсяги
  3. Вам потрібно відновити модуль, якщо його залежності оновляться

Моя проблема полягає в тому, що компілятори дистрибутивних дистрибутивних версій постійно оновлюються і користувач може мати власну збірку компілятора. Наразі можна просто оновити компілятор, а також оновити libstdc++. Але з модулями, мабуть, передбачається libstdc++, що потрібно оновити, коли компілятор оновлюється.

Як менеджер пакунків оброблятиме оновлення, наприклад, STL, коли компілятор оновлюється? Я не думаю, що створення кожної версії модуля STL для кожної версії компілятора є здійсненним. Також користувачеві не потрібно будувати свій власний модуль STL.


1
" Ви не можете використовувати модуль, побудований GCC в Clang ". Ви не можете використовувати складені результати модуля, побудованого GCC в Clang.
Нікол Болас

1
Я не можу наздогнати проблему. Можна розповсюджувати попередньо складені файли модулів, але це не обов'язково. Кожен користувач може скласти їх один раз для кожного компілятора / версії, і все добре. Якщо пакет distro доставляє попередньо складені файли, він зберігає лише одну компіляцію, яку ми робимо в даний час для кожної компіляції. Де користь для доставки заздалегідь складених модулів? Завантаження / установка може зайняти більше часу, оскільки компіляція одноразово.
Клаус

Який ви аналог, який ви передбачаєте, який не був би чистою спекуляцією?
н. 'займенники' м.

@Klaus Точно, користі немає. Але більшість додатків розділені на 2 частини. Інтерфейс та основна ліб. Таким чином, люди можуть безпосередньо взаємодіяти з основними функціональними можливостями. Візьмемо, наприклад, йоси. Плюється на лібіоси і йоси. Якщо libyosys вирішує використовувати модулі для швидшого побудови, libyosys повинен будувати кожен користувач. Ефективно перетворюючи кожного менеджера пакунків на AUR або на новий.
Мері Чанг

@ n.'pronouns'm. Я сподівався, що розробник менеджера пакунків побачить питання та пояснить, як вони вирішують проблему.
Мері Чанг

Відповіді:


1

Наразі (січ / 10/2020) модульна система вважається скоріше внутрішньою функцією проекту, а не заміною розподілу заголовка / lib. Як підказують хлопці із спільноти Clang, хоча є пропозиція створити незалежну форму AST від компілятора, ні Clang, ні Gcc, ні Microsoft не планують цього робити. Тож ви здогадуєтесь про

Ви можете мати багато різних версій одного модуля

є правильним і буде триматися ще деякий час.

Що стосується аспекту платформи управління пакунками, роздільна здатність досі невідома, але оскільки система модулів є більш характерною для проекту, найгірший випадок полягає в тому, що спосіб "заголовок / ліб" все одно відбуватиметься.

PS Я думаю, що stackoverflow не є добрим місцем для таких питань, якщо ви дійсно хочете відповіді, зверніться до цього списку пошти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.