Программирование на C++, часть 2

Новосибирск, весна 2021

Описание

Продолжение курса «Программирование на С++, часть 1»

Примерное содержание второго семестра

  • многопоточность от азов до сложных конструкций
  • move-семантика
  • compile-time вычисления
  • продвинутое использование шаблонов
  • undefined behavior
  • популярные библиотеки и инструменты
  • свежие фичи стандарта

Репозиторий курса (материалы, литература, ссылки)


Критерии оценки

Оценка Баллы
зачёт 7
хорошо 14
отлично 21

Максимум баллов за курс: 24


Домашние задания

В семестре предполагается 3 домашних задания стоимостью:

  • Задание 1 - до 10 баллов
  • Задание 2 - до 8 баллов
  • Задание 3 - до 6 баллов

Схема принятия задания:

  • первые 2 недели для посылки готового работающего решения
  • вторые 2 недели для прохождения ревью

Инструкция по оформлению домашнего задания аналогична первой части курса

Преподаватели

Список лекций

Многопоточность. Введение
  • Процессы и потоки. Обзор.
  • std::thread
  • Эффективность распараллеливания. Закон Амдала.
  • std::promise + std::future
  • std::async
Многопоточность. Продолжение.
  • race condition
  • std::mutex + std::lock_guard
  • объекты с доступом из нескольких потоков
  • deadlock
  • std::scoped_lock
  • std::recursive_mutex, std::shared_mutex
  • std::condition_variable
  • Thread Local Storage
Многопоточность. Продвинутый материал.
  • основы std::atomic
  • std::atomic vs std::mutex
  • Compile time && run time instructions reordering
  • Double Checked Locking Pattern
  • Spin Lock
  • Гибридные примитивы синхронизации
Многопоточность. Основы lock free
  • Определение lock free
  • Hardware memory model (really weak / weak with data dependency / strong / sequential consistent)
  • C++ memory model
  • Lock free stack:
    • ABA - проблема
    • Hazard Pointers
move-семантика
  • Категория выражения до и после С++11
  • Поддержка move-операций классами
  • std::move
  • Правила передачи параметра в функцию (С++11 и далее)
  • Perfect forwarding && universal references
Шаблоны. Продвинутый материал
  • SFINAE
  • std::enable_if
  • variadic templates
  • fold expression
  • tag dispatching
  • deduction guides
Мелкие нововведения стандарта
  • auto
  • user-defined literals
  • static assertions
  • атрибуты
  • std::string_view, std::span
  • std::optional
  • гетерогенный поиск по контейнерам
  • slicing в ассоциативных контейнерах
  • structured bindings
Undefined behavior
  • ill-formed / well-formed
  • Определение undefined behavior
  • UB на примерах
Compile time вычисления
  • Эволюция constexpr по различным версиям стандарта
  • constexpr и UB

  • consteval и constinit

  • стоимость compile-time вычислений