Бакалавриат
2021/2022
Язык программирования C++ (углубленный курс)
Лучший по критерию «Полезность курса для Вашей будущей карьеры»
Лучший по критерию «Новизна полученных знаний»
Статус:
Курс по выбору (Прикладная математика и информатика)
Направление:
01.03.02. Прикладная математика и информатика
Кто читает:
Базовая кафедра Яндекс
Где читается:
Факультет компьютерных наук
Когда читается:
2-й курс, 1, 2 модуль
Формат изучения:
без онлайн-курса
Охват аудитории:
для своего кампуса
Преподаватели:
Кот Михаил Евгеньевич,
Кускаров Тагир Фаридович,
Кутенин Данила Михайлович,
Латышева Александра Владимировна,
Скворцов Сергей Михайлович,
Хасанова Алия Азатовна,
Хорошанский Лев Александрович,
Чулков Андрей Сергеевич
Язык:
русский
Кредиты:
4
Контактные часы:
56
Программа дисциплины
Аннотация
Студенты на первом курсе изучали язык 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++, будущее С++, комитет, экосистема
Элементы контроля
- Маленькие домашние заданияВыдаются каждую неделю и направлены на закрепление лекционного и семинарского материалов.
- Большое домашнее задание 1Умные указатели. Пишем свои unique_ptr, shared_ptr, weak_ptr
- Большое домашнее задание 2Schema. Пишем парсер языка программирования lisp.
- ПересдачаСдача больших домашних заданий со штрафом в 30%.
- Большое домашнее задание 3Jpeg-decoder. Пишем парсер jpeg.
Промежуточная аттестация
- 2021/2022 учебный год 2 модульМин(Округление(0.6 * Большие_дз + 0.4 * Маленькие_дз + Б), 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.