• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Бакалавриат 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.

Авторы

  • Сысоева Алевтина Александровна
  • Кутенин Данила Михайлович