Содержание курса
Модуль 1. От мидла к сеньору: что меняется
7 уроков
1.
Кто такой сеньор в Rust: не синтаксис, а решения и…
↗
2.
Ревизия базы: владение, заимствование и время жизни за пять…
↗
3.
Ревизия базы: трейты, дженерики и обработка ошибок одним…
↗
4.
Мономорфизация против динамической диспетчеризации: цена…
↗
5.
Zero-cost абстракции: что это значит на самом деле и где…
↗
6.
Читаем чужой код: как быстро понять большой незнакомый крейт
↗
7.
Карта курса: от внутреннего устройства языка к архитектуре и…
↗
Модуль 2. Времена жизни на глубину
8 уроков
1.
Вспоминаем лайфтаймы: почему компилятор иногда не может их…
↗
2.
Подтипизация лайфтаймов: когда 'long подходит вместо 'short
↗
3.
Вариантность: ковариантность, контравариантность и…
↗
4.
Почему &mut T инвариантен по T и к чему это приводит
↗
5.
Ограничение 'static: что оно значит и чего не значит
↗
6.
HRTB: границы for<'a> и зачем они замыканиям
↗
7.
Лайфтаймы в трейт-объектах: Box и правила…
↗
8.
Разбор реальных ошибок borrow checker уровня сеньора
↗
Модуль 3. Продвинутые трейты и система типов
8 уроков
1.
Ассоциированные типы против параметров типа: когда что выбирать
↗
2.
Обобщённые ассоциированные типы (GAT): лайфтайм в…
↗
3.
Когерентность и orphan rule: почему нельзя impl всё для всего
↗
4.
Blanket impls: одна реализация для целого семейства типов
↗
5.
Маркерные трейты и PhantomData: типы-призраки без данных
↗
6.
Sealed-трейты: закрываем трейт от внешней реализации
↗
7.
Типовые состояния (typestate): некорректный вызов не…
↗
8.
Newtype и делегирование: заворачиваем чужие типы под свой…
↗
Модуль 4. Unsafe Rust: контракт с компилятором
9 уроков
1.
Что даёт и чего не даёт ключевое слово unsafe
↗
2.
Сырые указатели *const и *mut: создание и разыменование
↗
3.
Инварианты безопасности: почему каждый unsafe нужен с /// #…
↗
4.
Undefined behavior: список того, что нельзя делать никогда
↗
5.
UnsafeCell: единственный легальный путь к внутренней…
↗
6.
Пишем безопасную абстракцию поверх unsafe: пример буфера
↗
7.
union и работа с сырым представлением памяти
↗
8.
Miri: ловим UB, которое не видит обычный компилятор
↗
9.
Когда unsafe действительно оправдан, а когда это лень
↗
Модуль 5. FFI: Rust и внешний мир
9 уроков
1.
Зачем нужен FFI и какие гарантии на границе теряются
↗
2.
extern "C" и объявление внешних функций
↗
3.
#[repr(C)]: предсказуемая раскладка структур для C
↗
4.
Передача строк через границу: CStr, CString и нулевой байт
↗
5.
Владение через границу FFI: кто и когда освобождает память
↗
6.
Экспорт Rust-функций для C: #[no_mangle] и заголовки через…
↗
7.
Генерация биндингов к C-библиотеке через bindgen
↗
8.
Оборачиваем C-библиотеку в безопасный идиоматичный Rust-крейт
↗
9.
Паники через границу FFI и как их не выпустить наружу
↗
Модуль 6. Асинхронность изнутри
7 уроков
1.
Future как машина состояний: во что превращается async fn
↗
2.
Трейт Future, poll и тип Poll
↗
3.
Waker и контекст: как задача узнаёт, что пора продолжить
↗
4.
Самоссылающиеся структуры и почему они ломают перемещение
↗
5.
Pin и Unpin: закрепляем значение в памяти
↗
6.
Пишем свой Future и простейший исполнитель вручную
↗
7.
async в трейтах: что изменилось и где всё ещё нужен Box
↗
Модуль 7. Async в проде с Tokio
9 уроков
1.
Рантайм Tokio: планировщик, задачи и work-stealing
↗
2.
spawn, spawn_blocking и где живёт ваш код
↗
3.
Каналы Tokio: mpsc, oneshot, broadcast и watch
↗
4.
select!: гонка нескольких веток и её ловушки
↗
5.
Отмена задачи: что происходит при drop незавершённого Future
↗
6.
Backpressure и ограниченные каналы против переполнения памяти
↗
7.
Stream: асинхронный аналог итератора
↗
8.
Структурированная конкурентность: JoinSet и корректное…
↗
9.
Диагностика async: где утекают задачи и зависают локи
↗
Модуль 8. Макросы: код, пишущий код
8 уроков
1.
macro_rules! на глубину: фрагменты, повторения и рекурсия
↗
2.
Гигиена макросов: почему имена не конфликтуют
↗
3.
Границы декларативных макросов: когда нужен процедурный
↗
4.
Устройство процедурного макроса: TokenStream на входе и выходе
↗
5.
syn и quote: парсим синтаксис и генерируем код
↗
6.
Пишем derive-макрос: генерируем impl по структуре
↗
7.
Атрибутные макросы: #[my_attr] над функцией или типом
↗
8.
Функциональные макросы и отладка через cargo expand
↗
Модуль 9. Производительность: измеряй, потом оптимизируй
7 уроков
1.
Дисциплина оптимизации: сначала измерение, потом гипотеза
↗
2.
criterion: честный бенчмарк вместо секундомера
↗
3.
Профилирование через perf и чтение flamegraph
↗
4.
Раскладка памяти структур: выравнивание, padding и #[repr]
↗
5.
Кэш процессора: почему массив быстрее списка
↗
6.
Предсказание ветвлений и цена непредсказуемых if
↗
7.
Избегаем аллокаций: переиспользование буферов и SmallVec
↗
Модуль 10. Производительность: продвинутые техники
7 уроков
1.
Инлайнинг и #[inline]: помощь компилятору без вреда
↗
2.
SIMD: автовекторизация и явные интринсики
↗
3.
Кастомные аллокаторы и глобальный #[global_allocator]
↗
4.
Арены и пулы объектов для предсказуемого выделения
↗
5.
Копирование против перемещения: где прячутся лишние копии
↗
6.
Bounds checks: когда они стоят дорого и как честно их убрать
↗
7.
Замер до и после: как не соврать себе про ускорение
↗
Модуль 11. Архитектура больших систем
8 уроков
1.
Границы модулей и направление зависимостей в большом крейте
↗
2.
Гексагональная архитектура: порты и адаптеры на трейтах
↗
3.
DDD на Rust: моделируем домен типами, а не комментариями
↗
4.
Делаем недопустимые состояния непредставимыми на уровне домена
↗
5.
Дизайн ошибок в большой системе: слои и преобразование ошибок
↗
6.
thiserror для доменных ошибок, anyhow на границе приложения
↗
7.
Инъекция зависимостей через дженерики против трейт-объектов
↗
8.
Организация workspace: несколько крейтов в одном репозитории
↗
Модуль 12. Проектирование и публикация библиотек
8 уроков
1.
Проектирование публичного API: что легко изменить, а что…
↗
2.
Semver на практике: что считается ломающим изменением
↗
3.
#[non_exhaustive]: оставляем себе право на расширение
↗
4.
Feature-флаги: опциональная функциональность без раздувания
↗
5.
Условная компиляция через cfg и совместимость с no_std
↗
6.
Документация как контракт: /// , примеры и doctest
↗
7.
#[must_use], #[deprecated] и другие сигналы пользователю API
↗
8.
Публикация на crates.io: метаданные, лицензия и первый релиз
↗
Модуль 13. Распределённые и сервисные системы
8 уроков
1.
Модель акторов на Tokio: задача, почтовый ящик и сообщения
↗
2.
Backpressure в распределённой системе: где ставить границы
↗
3.
tracing: структурированные спаны вместо строчек логов
↗
4.
Метрики: счётчики, гистограммы и что вообще стоит мерить
↗
5.
Наблюдаемость: связываем логи, метрики и трассировку
↗
6.
gRPC и tonic: обзор RPC на Rust (это не курс по gRPC)
↗
7.
Обзор брокеров сообщений и Kafka с точки зрения Rust-сервиса
↗
8.
Graceful shutdown сервиса: дожидаемся, а не рубим
↗
Модуль 14. no_std, встраиваемый Rust и WebAssembly
7 уроков
1.
Что такое no_std и почему исчезает половина стандартной…
↗
2.
core и alloc: что остаётся без std
↗
3.
Обзор встраиваемого Rust: регистры, прерывания и отсутствие кучи
↗
4.
panic и обработка ошибок в среде без std
↗
5.
WebAssembly как цель компиляции: обзор модели
↗
6.
wasm-bindgen: мост между Rust и JavaScript (обзор)
↗
7.
Границы применимости: где Rust в браузере уместен, а где нет
↗
Модуль 15. Лидерство и рост в команде
6 уроков
1.
Код-ревью как инструмент роста команды, а не поиска вины
↗
2.
Менторство: как объяснять borrow checker, не отпугивая новичка
↗
3.
Технические решения и RFC: аргументируем письменно
↗
4.
Читаем исходники стандартной библиотеки и популярных крейтов
↗
5.
Первый вклад в open-source: issue, PR и общение с мейнтейнером
↗
6.
Управление техническим долгом и unsafe в чужом коде
↗
Модуль 16. Итоговый проект: высокопроизводительный сервис
6 уроков
1.
Проект: постановка задачи и архитектурные решения сервиса
↗
2.
Проектируем API и доменную модель на типах
↗
3.
Реализуем async-ядро на Tokio с корректной отменой
↗
4.
Добавляем наблюдаемость: tracing, метрики и graceful shutdown
↗
5.
Профилируем и оптимизируем горячий путь по данным
↗
6.
Пишем тесты, бенчмарки и документацию к релизу
↗
Модуль 17. Карта дальнейшего роста
4 урока
1.
Экосистема Rust: куда смотреть по каждому направлению
↗
2.
Специализации: системщик, веб, встраиваемый, WASM, инструменты
↗
3.
Как язык развивается: edition, RFC-процесс и участие в нём
↗
4.
Держим форму: как оставаться в курсе и расти дальше
↗