C++ lectures at MIPT (in Russian). Lecture 20. Modules

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

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

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

Лектор: Константин Владимиров
Дата лекции: 18 июня 2020 года

Звук: Дмитрий Рябцев

Громадное спасибо Дмитрию Рябцеву и Никите Руденко за то, что они рисковали серьёзными проблемами, но пришли и не бросили меня в критической ситуации.

Errata:

* слайд 13. Пропущен символ "*" в указателе S в "int yf(S *s)" (хотя до этого слайда всё было верно).
Рекомендации по теме
Комментарии
Автор

Я совсем зеленый в С++, но все равно посмотрел курс с большим удовольствием. Как хороший сериал, даже жалко что закончился. Огромная Вам благодарность! Понятно, что курс не для новичков, и частенько было очень больно. На мой взгляд данный курс нужно пересматривать каждый год, чем больше вещей ты понимаешь, тем больше ты вырос как программист. Буду дальше двигаться по плэйлистам.

ОлегВасилевский-шщ
Автор

Надеюсь у "Павла ик" были некие личные оснвания обидеть человека. Лучших лекций я не находил. Подача материала в том объеме чтобы выстроить мысли в структуру и дать необходимое колличество информации по данной теме. Лекции построены в виде диалога равного с равными, то есть профессионал с професионалами. Лекция, которой поделился "Павел ик" же построена как обучение операторов или кассиров "нажмите эту кнопку а потом эту". Мне очень жаль что Константин не преподавал у меня. Мне кажется я бы лет на десять раньше пришел к такому пониманию языка С++, какое у меня сейчас.

ivandomnikov
Автор

Константин, возможно стоит записать базовый курс, которые Вы читаете для второкурсников?

viacheslavbarkov
Автор

A declaration is said to be a definition of each entity that it defines

elkadaf
Автор

То чувство, когда модули уже были в любимом Фортране, пока ты был ещё молод и прекрасен 😃

DrUlrih
Автор

Errata: слайд 13. Пропущен символ "*" в указателе S в "int yf(S *s)" (хотя до этого слайда всё было верно).

pdawniksem
Автор

41:45 Есть и обратные примеры, когда хедеры выигрывают у модулей, правда тесты эти очень синтетические, т.к. до недавнего времени (а может и сейчас, не пробовал) в модули нельзя было помещать шаблоны и соответственно тестировать приходилось только на переменных/функциях, а наибольший выигрыш то модули должны давать как раз на шаблонах. Дело в том, что между модулями есть зависимости, а при раздельной компиляции каждая единица трансляции компилируется абсолютно независимо от другой (платим за это тем, что код из одного и того же заголовка будет компилироваться множество раз если заголовок включен в несколько единиц трансляции). Соответственно, если у нас большая сборочная ферма с сотней ядер, то за счёт практически линейной масштабируемости (если конечно памяти хватит) проект на заголовках соберётся быстрее аналогичного проекта на модулях, т.к. для модулей придется строить граф зависимостей, его сортировать и не факт, что получится загрузить все имеющиеся мощности. Но опять же не видел примеров для кода, активно использующего шаблоны, там можно много выиграть за счёт переиспользования сохраненного AST.

samolisov
Автор

Ещё не понятно как будут вести себя модули в гетерогенных системах, том же SYCL, когда код для хоста и устройства вроде бы один и тот же, но есть нюансы, когда с помощью макроопределений код все же немного модифицируется, всякие вот #ifdef __SYCL_DEVICE_ONLY__ и т.д. С другой стороны в том же Rust подобные проблемы все же решают за счёт атрибутов типа #[cfg(target_os="linux")], возможно и в плюсах научимся. Все же плюсы с модулями это будет уже другой язык как мне кажется. Это какое-то ключевое изменение, затрагивающее физический дизайн. Не помню изменений подобного уровня в истории других языков.

samolisov
Автор

11:02 "язык си манглирует имена" ...а потом мы пытаемся слинковаться с MinGW библиотекой из под Visual Studio и читаем совершенно нечитаемые крики линкера, большое спасибо манглам языка си

thepawday
Автор

Для бизона один дефайн можно отдать компилятору из командной строки для той единицы трансляции где это требуется

YuryBogachev
Автор

Пока выглядит так, будто в coding guidelines проекта надо вводить тотальный запрет на использование модулей

victormustya
Автор

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

Павелик-зе