Адрес e-mail:

Факультативный курс «Advanced C++ Programming for Software Development»

Уважаемые студенты!

Рекомендуем обратить внимание на новый факультативный курс «Advanced C++ Programming for Software Development».

Занятия начнутся 7 февраля. Данный курс будет полезен студентам, желающим изучить технологии проектирования и разработки промышленного ПО с использованием C++ (в частности, будут рассматриваться библиотеки Boost и параллельное программирование). Курс ведет ассистент кафедры информатики и вычислительной математики Макаров Иван Сергеевич. Место и время проведения: четверг, 18:35, 324а ЛК и пятница, 18:35, 701 КПМ.

Первая (организационная) встреча состоится 7 февраля в 18:35, 324а ЛК.

Курс организован при поддержке Фонда целевого капитала МФТИ.

Программа курса:

1. Логирование, кодировки и локали

Работа с std::locale. Корректное отображение текста (кириллицы) в консоли. Типы wide char. Кодировки в ОС Windows. Система юникода, UTF-8, UTF-16, UTF-32. Big/little endian. Boost.Endian. Перекодировка текста из одной системы кодировок в другую. Boost.Locale. Реализация системы логирования. Запись сообщений в файл, syslog, консоль. Boost.Log. Изучение архитектуры библиотеки логирования. Создание фильтров, форматтеров, стоков. Использование логировщика в соответствии с идиомой RAII.

2. Специализированные контейнеры

Заполнение контейнеров посредством Boost.Assign. Биассоциативные контейнеры, Boost.Bimap. Реализация циклического буфера, варианты его использования. Многомерные массивы, Boost.Multiarray. Контейнеры с различными системами индексации, Boost.Multiindex. Гетерогенные контейнеры, Boost.Variant.

3. Динамические библиотеки и WinAPI

Создание динамических библиотек DLL Windows в Microsoft Visual Studio. Подключение и работа с DLL посредством Windows API. Вызов функций из библиотеки, передача параметров функции. Создание кросc-платформенных приложений с динамическими библиотеками с помощью Boost.DLL/DSO.

4. Управление файловой системой

Пути. Построение и разбиение путей. Управление директориями и файлами посредством Boost.Filesystem. Определение размера файла, его тип. Проход (итерирование) по директории.

5. Интеграция Python 3 в C++

Классы задач, решаемых с помощью Python. Python C/C++ API. Подключение интерпретатора python к проекту Microsoft Visual Studio. Исполнение скрипта на Python. Передача обрабатываемых данных, возвращение результатов из python-модуля. Интеграция Python 3 с помощью библиотеки Boost.Python.

6. Обработка текстовых данных

Задачи NLP/NLU, анализ текста. Извлечение информации из текста. Лемматизация текста, выделение токенов и групп. Алгоритмы на строках на базе библиотеки Boost.StringAlgo. Создание лексических анализаторов и генераторов с помощью Boost.Spirit. Постобработка структурированного текста, форматы представления данных CSV, XML, JSON. Статистическая обработка неструктурированного текста.

7. Математические библиотеки

Математические и алгоритмические возможности фреймворка Boost. Boost.Algorithm. Алгоритмы на графах, представление графов. Boost Graph Library. Интервалы. Безопасные преобразования типов. Библиотека uBLAS в приложении к задачам линейной алгебры. Векторы, матрицы и кватернионы, Boost.QVM. Решение простейших дифференциальных уравнений с помощью Boost.Odeint.

8. Дополнительные утилиты Boost

Получение информации о типе, кроссплатформенное решение на базе Boost.TypeIndex. Создание уникальных идентификаторов объектов с помощью UUID. Управление памятью, модель Pool. Упрощение системы передачи аргументов в функцию с помощью Boost.Parameter.

9. Основы многопоточного программирования

Параллелизм – что это и для чего нужно. История параллелизма в C++. Базовые операции управления потоками. Передача аргументов функции в потоке. Работа потоков в фоновом режиме. Ожидание потоков. Создание заданного числа потоков. Идентификаторы потоков.

10. Синхронизация параллельных операций

Проблемы разделения данных между потоками. Состояние гонки. Взаимоблокировка. Защита разделяемых данных. Мьютексы. Типы мьютексов. Защита данных во время инициализации. Механизм call_once. Ожидание событий. Условные переменные. Механизм будущих результатов. Возврат результата из фоновой задачи. Особенности передачи исключений. Ожидание ограничений по времени.

11. Модель памяти C++ и атомарные операции

Основы модели памяти. Атомарные операции и типы в C++. Atomic_flag, atomic_bool. Арифметические атомарные типы. Атомарные типы указателей. Создание пользовательских атомарных типов. Синхронизация операций. Типы упорядочения доступа к памяти.

12. Проектирование параллельных структур данных с блокировками и без блокировок

Требования к структурам данных, используемых в параллельном коде. Потокобезопасность. Стек с блокировками. Очередь с блокировками. Структуры данных без блокировок. Boost.LockFree. Стек без блокировок. Сборщики мусора в C++. Технология hazard pointer. Потокобезопасная очередь без блокировок. Рекомендации по разработке параллельных структур данных без блокировок.

13. Продвинутое управление потоками

Распределение работы между потоками. Разбиение по данным и по задачам. Перебрасывание кэша. Ложное разделение. Аппаратный параллелизм. Проектирование параллельных алгоритмов. Пулы потоков. Конкуренция за очередь работ. Прерывание работы потоков. Тестирование.

14. Организация взаимодействия процессов

Адресное пространство процессов. Идентификаторы процессов. Создание процесса с помощью Boost.Process. Организация межпроцессного взаимодействия с помощью Boost.Interprocess. Передача данных между процессами. Разделяемая память, сигналы.

15. Сетевое программирование

Boost.Asio. Протоколы IP. TCP/UDP. Создание endpoint-ов. Пассивные и активные сокеты. Разрешение DNS имен. Привязка сокета к endpoint-у. Установка соединения. Ввод/вывод. Синхронные и асинхронные операции чтения и записи. Прекращение работы с сокетом. Клиент-серверное взаимодействие. Создание клиента. Создание сервера. HTTP и SSL/TLS.

16. Дополнительные технологии параллельного программирования

Создание подпрограмм с помощью Boost.Coroutine. Осуществление вычислений на графических процессорах с помощью Boost.Compute. Реализация MPI в Boost.



Если вы заметили в тексте ошибку, выделите её и нажмите Ctrl+Enter.

МФТИ в социальных сетях