Чему вы научитесь
- Писать на C23 идиоматично: nullptr, constexpr, typeof, auto, атрибуты, перечисления с фиксированным типом
- Защищать целочисленную арифметику от переполнения через stdckdint.h вместо ручных проверок
- Проектировать формат данных на диске, независимый от компилятора и архитектуры
- Различать неопределённое поведение и «работает на моей машине», и понимать, что делает с ним оптимизатор
- Управлять временем жизни памяти: арены, пулы, передача владения через API
- Работать с POSIX-вводом-выводом так, чтобы данные переживали отключение питания
- Собирать проект и Make, и CMake, управлять видимостью символов и ABI библиотеки
- Находить ошибки санитайзерами, фаззерами и статическим анализом до того, как их найдут пользователи
- Писать конкурентный код по модели памяти C11/C23, а не по интуиции
- Строить сетевой сервер на epoll с корректной остановкой, лимитами и наблюдаемостью
О курсе
Для кого этот курс
Начальные требования
Опыт системного программирования на любом языке: понимание указателей, стека, кучи, системных вызовов, потоков.
Из инструментов понадобятся GCC 15 или Clang 20 (для C23), Linux x86-64 или aarch64, make и CMake. Всё это есть в любом современном дистрибутиве. Санитайзеры входят в поставку компиляторов; для фаззинга нужен Clang.
Преподаватели курса
Формат курса
Текстовые уроки с большим количеством кода. Каждая глава заканчивается практическим уроком, где разобранное собирается в работающую часть проекта.
В конце урока — задание, которое стоит выполнить на своём коде, и вопросы для самопроверки. Главы с третьей по четырнадцатую содержат тестовые задачи.
Все листинги проверены компиляцией, все утверждения о поведении — запуском. Где приводится вывод компилятора, дизассемблера или санитайзера, это настоящий вывод, а не пересказ.
Что вы получите
- Исходники nestor целиком: библиотека, сервер, клиент, бенчмарк, тесты, фаззеры, скрипты проверки
- Формат данных и сетевой протокол с документацией и обоснованием решений
- Набор тестов, который запускается в трёх конфигурациях, включая ASan+UBSan и TSan
- Makefile и CMakeLists, пригодные для переноса в свой проект
- Юнит systemd и Dockerfile с многоступенчатой сборкой
- Тестовые задачи с объяснением после неверного ответа