Бакалавриат
2024/2025
Язык программирования C++ (углубленный курс)
Статус:
Курс по выбору (Прикладная математика и информатика)
Направление:
01.03.02. Прикладная математика и информатика
Где читается:
Факультет компьютерных наук
Когда читается:
2-й курс, 1, 2 модуль
Формат изучения:
без онлайн-курса
Охват аудитории:
для всех кампусов НИУ ВШЭ
Язык:
русский
Кредиты:
5
Программа дисциплины
Аннотация
Студенты на первом курсе изучали язык C++ с самых его основ - синтаксиса, постигали объектно ориентированное программирование и сдавали много тренирующих задач. Тем не менее, меньше времени уделялось “боевой” разработке, которая проходит в больших проектах. Мы постараемся в этом курсе углубиться в сложные темы как move семантика, мультипоточность, метапрограммирование, инструменты, которые не были рассмотрены или только поверхностно на первом курсе, рассказать текущее место C++ в мире, чем он хуже или лучше других языков, дать много больших задач и сделать курс более практическим, чтобы набить руку и не бояться писать даже на таком сложном языке как C++.
Цель освоения дисциплины
- На очень глубоком уровне понимать концепты move семантики
- Понимать, как работают аллокаторы памяти
- Концепты обработки ошибок
- Знать про паттерны PImpl, Fabric, Singleton, Type Erasure, Rule of X и антипаттерны, которых стоит избегать
- Метапрограммирование, концепты
- Знать про многопоточность
- Компиляторы, библиотеки, системы сборки
- Познакомиться с C++20 Познакомиться с C++20
Планируемые результаты обучения
- Знать о компиляторорах, библиотеках, системах сборки
- Знать о метапрограммировании, концептах
- Знать про паттерны и антипаттерны, которых стоит избегать
- Понимание концептов move семантики
- Понимать, как работают аллокаторы памяти
- Узнать, что понимание лямбда функций даёт понимание приличной части C++.
Содержание учебной дисциплины
- Умные указатели, move семантика (сравнение с Rust), perfect forwarding, RAII, lifetime
- Разделение view от хранения объекта, memory pool, как память работает при этих парадигмах, stack vs heap.
- Лямбда функции, концепты, как они реализованы
- Паттерны, наследования, pimpl, command, фабрика, singleton, type erasure, rule of X, RVO, CRTP
- Антипаттерны, неопределённое поведение, инициализация, almost always auto, almost always avoid auto, видимость объектов, глобальные переменные, порядок инициализации, макросы. Как избежать их
- Метапрограммирование
- Мультипоточность
- С++20, модули, ranges, будущие направление C++23
- Компилятор, атрибуты, архитектура LLVM, санитайзеры, фаззинг
- Как работает сборка C++ в случае многих файлов, cmake
- Перфоманс C++, что делает C++ быстрым
- Ответы на вопросы, истории о C++, будущее С++, комитет, экосистема
Элементы контроля
- Большие ДЗБольшие ДЗ после дедлайна не принимаются.
- Маленькие ДЗ
- ТестыВ конце каждого семинара будут проводиться короткие квизы, состоящие из 2-3 вопросов со свободным ответом. Оценка за них усредняется и входит в итоговую с коэффициентом 0,1.
Промежуточная аттестация
- 2024/2025 2nd moduleМин(Округление(0.6 * Большие_дз + 0.4 * Маленькие_дз + 0.1 * Тесты + Б), 10), где Б — бонус.
Список литературы
Рекомендуемая основная литература
- David Vandevoorde, Nicolai M. Josuttis, & Douglas Gregor. (2017). C++ Templates : The Complete Guide. Addison-Wesley Professional.
- Scott Meyers. (2014). Effective Modern C++ : 42 Specific Ways to Improve Your Use of C++11 and C++14. O’Reilly Media.
- Язык программирования С++. Вводный курс, Липпман, С.Б., 2003
Рекомендуемая дополнительная литература
- Anthony Williams. (2019). C++ Concurrency in Action. Manning Publications.