Использование модулей С++20
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.159] |
|
|
Использование модулей С++20
|
Сообщ.
#1
,
|
|
|
|
Начиная с C++20 (и дальше в C++23/C++26) в языке официально появились модули (modules), которые позволяют строить проект без классического разделения на заголовочные (.h/.hpp) и файлы реализации (.cpp). Что-то подобное на реализацию кода в Object Pascal/Delphi, с разделением на блоки описания интерфейса и реализации в одном файле исходного кода.
Пример: ![]() ![]() // MyModule.cppm export module MyModule; import <string>; // - - - - - - - > Как "interface" в Delphi export class Person { public: Person(std::string name); void greet() const; private: std::string name_; }; // - - - - - - - > Как "implementation" в Delphi Person::Person(std::string name) : name_(std::move(name)) {} void Person::greet() const { // ... } |
|
Сообщ.
#2
,
|
|
|
|
Так и до begin/end скоро дойдут...
Извиняюсь за офтоп |
|
Сообщ.
#3
,
|
|
|
|
Уже 6 лет как. std::ranges:
![]() ![]() std::vector<int> arr; /* ... */ std::ranges::sort(arr); |
|
Сообщ.
#4
,
|
|
|
|
Цитата SergeyIT @ Так и до begin/end скоро дойдут... Извиняюсь за офтоп Можно не ждать, уже давно можно ![]() ![]() #define БЭГИН { #define ЭНД } #define ЕСЛИ if #define ЕСЛИ_НЕ else #define СЛИВАЙ_КЕРОСИН return #include <iostream> int main() БЭГИН int ФЛАГ = 1; ЕСЛИ (ФЛАГ ==1) БЭГИН std::cout << "Привет, мир!\n"; ЭНД ЕСЛИ_НЕ БЭГИН СЛИВАЙ_КЕРОСИН 1; ЭНД ЭНД Только вопрос был в друом: почему в |
|
Сообщ.
#5
,
|
|
|
|
Ку-ку ептель
А вот c Qt в этом плане проблемсы. Там один из этапов - предобработка исходного кода с помощью MOC (мета-объектный компилер). А он не в зуб ногой про модули. Бида и пичаль! Но есть и хорошая новость (относительно хорошая), в файлах проекта, если не использовать Q_OBJECT - все будет по фэн-шую. Современные средства сборки (типа cmake, qbs) поддерживают смешанный синтаксис - старые варики с заголовками и реализацией, и новые модульные, и это всё можно смешивать! Добавлено Qraizer, ну ты хоть проголосуй, пажалуста!!! |
|
Сообщ.
#6
,
|
|
|
|
Ну ок, проголосил.
Я честно пытался найти модулям применение и не нашёл. Модули требуют иной модели декомпозиции, и она не пересекается с привычной. ИМХО единственный плюс модулей в отсутствии необходимости предоставлять компилятору интерфейсы в текстовом виде, что, впрочем, вполне понятно, ибо ему вполне достаточно деревьев грамматического разбора. Но недостаточно человеку, который использует этот модуль, и ему не обойтись без документации. Каковую <заголовки> вполне себе могут предоставить, если правильно организованы. В убогом виде модули уже давно присутствуют в некоторых средствах разработки в лице предкомпилированных заголовков. Так что те, кто их использовал в своих проектах, прекрасно знают про ограничения и правила правильной организации, иначе профита от них не будет, и относительно дёшево могут заменить их на модули. Мне эти правила никогда не нравились, я их и не использовал. Модули могут легко использоваться в новых проектах, если сразу начать их проектировать с их учётом, но уже имеющиеся проекты на модули переносить нет никаких резонов. |
|
Сообщ.
#7
,
|
|
|
|
Только собираюсь попробовать. Раньше когда подступался, всегда были проблемы с инструментами, то в ide что-то не так, то в системе сборки, то компиляторы разные по-разному делали. Надеюсь, что сейчас уже можно спокойно применять.
|
|
Сообщ.
#8
,
|
|
|
|
Цитата D_KEY @ Только собираюсь попробовать. Раньше когда подступался, всегда были проблемы с инструментами, то в ide что-то не так, то в системе сборки, то компиляторы разные по-разному делали. Надеюсь, что сейчас уже можно спокойно применять. Надеюсь, что уже достаточно времени прошло, чтобы эти недочёты исправили. |
|
Сообщ.
#9
,
|
|
|
|
И драсти. Вот товарищ делится впечатлениями от модулей. Хотя я бы предпочёл, чтоб опытом, но что есть.
|
|
Сообщ.
#10
,
|
|
|
|
Видел "плач Ярославаны", видел жалобы в угол Мелкомягких компилеров. Но есть и топчик - clang, который владеет!
|
|
Сообщ.
#11
,
|
|
|
|
Qraizer, и все же ...
Ты, как самый из продвинутых олд-фагов форума по С++, может всеж взвалишь на себя посильную ношу исследования этой темы? Нам не нужны темы на Хабре, нужна местечковая "тёплая" (щетай "ламповая" тема). Типа, можно или не желательно, для новых проектов? Я про бесты и фэйлы ... Пожалуйсто, напряги немного свои чякры! Уверен, что многие со мной тебя будут благодарить! Потом. Молчят просто пока, но это дело времени. Уверен! |
|
Сообщ.
#12
,
|
|
|
|
Если тебя интересует личный опыт, то прости, но до ноября у меня свободного времени не будет. Если просто рассуждения по теме, то это можно устроить, аргументировать точку зрения смогу.
|
|
Сообщ.
#13
,
|
|
|
|
Цитата Qraizer @ Если тебя интересует личный опыт, то прости, но до ноября у меня свободного времени не будет. Если просто рассуждения по теме, то это можно устроить, аргументировать точку зрения смогу. Да нет, время ждёт конечно! Интересуют конечно не "популистские" посты на Хабре. Да, я понимаю, что у нас часто бывают тут конфликты ... Но со времени "ушедшего в небеса" Флекса Ферума - ты остался щетай один из олдфагов. С тебя и спрос. И это не только реакция десятков форумчян, но и сотен тысяч гостей и ботов! Вам должно понимать, это суровая ответственность!!! |
|
Сообщ.
#14
,
|
|
|
|
Qraizer, скажи просто "по-честноку", тебе бы было интересно начать новые проекты с "модульностей" ???
Или все же "нет", с определённой долей скептицизма и осторожностей?! |
|
Сообщ.
#15
,
|
|
|
|
Нет. Мне с них итоговой выгоды никакой, затраченные усилия на смену парадигм проектирования не окупятся.
|
|
Сообщ.
#16
,
|
|
|
|
Ясно, +++
|
|
Сообщ.
#17
,
|
|
|
|
В нашем мире полно офигенных технологий.
Я вот задолбался с bazel, я бы тому кто это придумал - с удовольствием заехал в табло, с ноги. Ибо нехер выёживаться. А тут еще и модули. Как же я задолбался... |