Магистерский курс C++ (МФТИ, 2022-2023). Лекция 5. Модули в C++.

preview_player
Показать описание
Лекции в магистратуре МФТИ по современному C++ на русском языке. Кафедра микропроцессорных технологий.

Настало время поговорить о модулях. Мы начнём с общих философских вопросов, далее остановимся на прекомпилированных хедерах и наконец осознаем модули во всей их красоте и силе. Ну или попытаемся.

Лектор: Константин Владимиров.
Дата лекции: 5 октября 2022 года.
Съёмка и звук: Юлий Тарасов.

Timeline:
00:00 Общие вопросы и проблемы хедеров
12:20 Прекомпилированные хедера
22:34 Модули: первое знакомство
33:14 Импорт и экспорт
49:10 Глобальные и приватные фрагменты
59:05 Case study: модуляризация ParaCL
01:16:30 Управление конфигурациями
01:28:04 Литература

Errata:
* тут пока пусто
Рекомендации по теме
Комментарии
Автор

Спасибо, отличная лекция. Интересная возможность языка. В Фортране такое было уже в 95 стандарте.Частота смеха Константина самая высокая за все курсы имхо😃

DrUlrih
Автор

51:47 на слайде очепятка "purveiw"

zxczxc
Автор

Прочитал в начале как "магический" курс С++!))

voidplays
Автор

Программисту хочется минимизировать время на решение проблем, связанных с языком.
Казалось бы, модули должны были упростить нам жизнь, но под конец лекции мы оказались в ситуации "а как обеспечить их поддержку cmake?". Звучит обнадеживающе! Особенно Ваша фраза "Наслаждайтесь!".

nevadawolf
Автор

Если бы была возможность определить некоторую семантическую меру в рамках конкретного множества смыслов (что такое смысл - опустим, но концепты ближе всего, на мой вкус), то я бы ответил на вопрос о распределении классов по хедерам следующим образом: те, что имеют наименьшую дистанцию по семантической мере оказываются ближе всего с точки зрения структуры проекта и наоборот.

ИванБелехов-ье
Автор

Константин, позвольте задать несколько вопросов.
Поскольку эта темя для меня нова, все используемые здесь слова неформальны и могут конфликтовать с используемой в лекции терминологией.

1. Как precompile headers и модули работают с шаблонами, там же не ясно, что нужно компилировать без использования? А что на счёт встраивания вызовов?
2. Модули позволяют не перекомпилировать файлы, если файл, использующий модуль, не видит ту часть что изменилась? Или же модули лишь о сокрытии имён?
3. Если второй пункт работает, есть ли способ сузить видимую часть состоявшегося модуля, возможно, посредством нового, чтобы сделать зависимости от него еще меньше?
4. Если второй пункт не работает, то зачем вообще модули нужны? Может быть, вы ответили на этот вопрос в лекции, но я не уловил.

Благодарю.

ddvamp
Автор

Внесу лепту в ответ на вопрос как классы распределять по хедером это личный многострадальный опыт: главное избегать получения в результате своих трудов "макаронного кода"!!! А подробно и интересно в книжках Роберта Мартина.

ЮрийПопов-ля
Автор

Подумалось, а не лучше бы сделать по умолчанию всё видимым, убрали бы само слово export и для скрытия использовали слово internal, и можно было бы заводить новую единицу трансляции для деталей реализации internal module A; Но это вопрос к комитетчикам

pavelrid
Автор

Выходит, что модули - это круто, но их использование - это боль. Сейчас где-то в продакшене они используются?

ddcd
Автор

Двойное подчеркивание это же уб, не надо так писать ...

niklkelbon
Автор

спасибо большое за ваши труды! много интересного узнал про модули!

sigasigasiga
Автор

52:37 всегда ценил ваши лекции в частности за то, что вы используете чистый русский язык без англицизмов там, где это возможно. например, описываемый по таймкоду механизм вы назвали "разбиениями". однако было бы очень круто, если бы вы в скобочках также упоминали английское название, чтобы термин можно было сразу поискать в гугле, ну или просто знать, как его называют в мировом сообществе

sigasigasiga