Курс на Stepik
Обложка курса «Rust для мидлов» на Stepik
500 ₽

Rust для мидлов 5.000

Открыть на
STEPIK.ORG

Rust для middle: lifetimes, замыкания, итераторы, трейты, smart pointers, ошибки, тесты, serde, clap, потоки, async/Tokio и итоговый CLI-проект.

Показатель Текущие показатели Рост
Значение 🏆 Рейтинг 3 дн 7 дн 30 дн
Количество учеников на курсе «Rust для мидлов»Учеников на курсе 28
Сертификаты, выданные на курсе «Rust для мидлов»Сертификатов выдано 0
Отзывы о курсе «Rust для мидлов»Отзывов получено 2
Рейтинг курса «Rust для мидлов»Рейтинг курса 5.000
Уроки в курсе «Rust для мидлов»Количество уроков 167
Тесты в курсе «Rust для мидлов»Количество квизов 808
Время прохождения курса «Rust для мидлов»Время прохождения курса
Стоимость курса «Rust для мидлов»Стоимость курса 500 ₽
Обновления курса «Rust для мидлов»Обновления курса
Дата публикации курса «Rust для мидлов»Дата публикации курса
Последнее обновление курса «Rust для мидлов»Последнее обновление
Сложность normal

Содержание курса

Разделы в курсе «Rust для мидлов» 20 разделов Уроки в курсе «Rust для мидлов» 167 уроков Тесты в курсе «Rust для мидлов» 808 тестов Время прохождения курса «Rust для мидлов» 1 ч. Последнее обновление курса «Rust для мидлов» обн. 16 июля 2026

Модуль 1. Введение: от джуна к продуктивному миддлу

6 уроков
1. Чем миддл на Rust отличается от джуна: не только «больше кода»
2. Что мы считаем пройденным: краткая ревизия базы Rust
3. Ещё одна ревизия: владение, заимствование и матчинг на одном…
4. Как устроен этот курс и как с ним работать
5. Обновляем инструменты: rustup, стабильный компилятор, clippy…
6. С чего начать, если вы пришли не из курса «Rust для джунов»

Модуль 2. Углублённое владение и заимствование

8 уроков
1. Владение ещё раз, но глубже: кто и когда освобождает память
2. Перемещение (move) против копирования: Copy и Clone в деталях
3. Заимствование под микроскопом: правила borrow checker
4. Изменяемое и неизменяемое заимствование: почему нельзя смешивать
5. Non-Lexical Lifetimes: почему заимствование заканчивается…
6. Заимствование полей структуры по отдельности
7. Частые ошибки borrow checker и как их читать
8. Reborrow: как ссылка на ссылку упрощает жизнь

Модуль 3. Времена жизни (lifetimes)

9 уроков
1. Зачем нужны времена жизни: проблема висячих ссылок
2. Первая аннотация времени жизни: синтаксис 'a
3. Времена жизни в сигнатурах функций
4. Правила элизии: почему аннотации часто не нужны
5. Несколько параметров времени жизни в одной функции
6. Времена жизни в структурах: храним ссылку внутри
7. Времена жизни в методах и блоке impl
8. Время жизни 'static: что это и когда уместно
9. Связь времён жизни и заимствования: собираем картину целиком

Модуль 4. Замыкания (closures)

8 уроков
1. Что такое замыкание и чем оно отличается от функции
2. Захват переменных из окружения: по ссылке и по значению
3. Ключевое слово move: забираем владение в замыкание
4. Трейты Fn, FnMut и FnOnce: три способа вызвать замыкание
5. Передаём замыкание в функцию: границы по Fn-трейтам
6. Возвращаем замыкание: impl Fn и Box
7. Функции как значения: указатели на функции fn
8. Практика: собственный кэширующий обёртка на замыкании

Модуль 5. Итераторы: глубокое погружение

11 уроков
1. Трейт Iterator и метод next: как работает цикл под капотом
2. Ленивость итераторов: почему без collect ничего не происходит
3. Адаптеры map, filter, take, skip и их комбинирование
4. Потребляющие методы: sum, count, fold, reduce
5. Метод collect и вывод типа через turbofish
6. Собираем в разные коллекции: Vec, HashMap, String
7. enumerate, zip, chain, rev и flat_map
8. Метод filter_map и работа с Option в цепочке
9. Реализуем собственный итератор через impl Iterator
10. IntoIterator: как for понимает разные коллекции
11. Крейт itertools: полезные адаптеры сверх стандартных

Модуль 6. Продвинутые трейты

8 уроков
1. Трейты как контракт: вспоминаем и идём дальше
2. Реализации по умолчанию и переопределение методов
3. Границы трейтов на дженериках и синтаксис where
4. Ассоциированные типы против параметров-типов
5. Супертрейты: один трейт требует другого
6. Orphan rule: почему нельзя реализовать чужой трейт для чужого…
7. Паттерн newtype: обходим orphan rule
8. Маркерные трейты и что они значат

Модуль 7. Диспетчеризация и трейт-объекты

7 уроков
1. Статическая диспетчеризация и мономорфизация
2. Динамическая диспетчеризация: трейт-объекты dyn Trait
3. Box: храним разные типы за одним интерфейсом
4. &dyn Trait и vtable: как это работает внутри
5. Object safety: почему не любой трейт можно сделать dyn
6. Статика против динамики: производительность и гибкость
7. Вектор трейт-объектов: гетерогенные коллекции

Модуль 8. Ключевые трейты стандартной библиотеки

9 уроков
1. Display и Debug: два способа показать значение
2. From и Into: идиоматичные преобразования типов
3. TryFrom и TryInto: преобразования, которые могут не удаться
4. Перегрузка операторов: трейты Add, Mul и другие
5. PartialEq, Eq и сравнение на равенство
6. PartialOrd, Ord и упорядочивание значений
7. Трейт Default: разумные значения по умолчанию
8. Deref и Deref coercion: почему &Box; ведёт себя как T
9. Трейт Drop: свой код при освобождении значения

Модуль 9. Дженерики: продвинутый уровень

8 уроков
1. Дженерики ещё раз: параметры типов в функциях и структурах
2. Мономорфизация: как дженерики превращаются в конкретный код
3. Границы трейтов на дженериках: комбинируем требования
4. Дженерики с несколькими параметрами и where-блоки
5. Const-дженерики: параметризация по значениям
6. Массивы фиксированного размера через const-дженерики
7. Ассоциированные константы в трейтах
8. Фантомные типы: PhantomData и типовые состояния

Модуль 10. Обработка ошибок по-взрослому

10 уроков
1. Вспоминаем Result и оператор ?
2. Оператор ? с автоматической конверсией через From
3. Свой тип ошибки как перечисление
4. Реализуем трейт std::error::Error для своей ошибки
5. Box: универсальный тип для любой ошибки
6. Крейт thiserror: свои ошибки без шаблонного кода
7. Крейт anyhow: удобные ошибки в приложениях
8. thiserror против anyhow: библиотека или приложение
9. Добавляем контекст к ошибкам с помощью context
10. Паника против Result: когда паника оправдана

Модуль 11. Умные указатели

9 уроков
1. Что такое умный указатель и зачем он нужен
2. Box: значение в куче и рекурсивные типы
3. Rc: разделяемое владение через подсчёт ссылок
4. Внутренняя изменяемость: почему нужен RefCell
5. RefCell: проверка заимствования во время выполнения
6. Комбинация Rc>: разделяемое изменяемое состояние
7. Циклы ссылок и утечки памяти
8. Weak: слабые ссылки против циклов
9. Cow: клонирование только при необходимости

Модуль 12. Коллекции: глубокое погружение

8 уроков
1. Vec ещё раз: ёмкость, реаллокация и производительность
2. VecDeque: очередь с двух концов
3. HashMap глубже: хеширование и entry API
4. HashSet: множества и операции над ними
5. BTreeMap и BTreeSet: упорядоченные коллекции
6. BinaryHeap: приоритетная очередь
7. Свой ключ для HashMap: трейты Hash и Eq
8. Выбор коллекции: сравнительная таблица и критерии

Модуль 13. Модули, крейты и организация проекта

8 уроков
1. Система модулей: mod, pub и дерево модулей
2. Пути к элементам: use, self, super и crate
3. Разделяем код на файлы и папки модулей
4. Библиотечные и бинарные крейты в одном пакете
5. Cargo.toml изнутри: зависимости, features и профили
6. Workspace: несколько крейтов в одном репозитории
7. Условная компиляция: cfg и feature-флаги
8. Публикация крейта на crates.io и семантическое версионирование

Модуль 14. Тестирование: глубокое погружение

10 уроков
1. Юнит-тесты и модуль #[cfg(test)] ещё раз
2. Организация тестов: assert-макросы и структура теста
3. Атрибут #[should_panic] и проверка паник
4. Тесты, возвращающие Result, и оператор ?
5. Интеграционные тесты в папке tests
6. Doc-тесты: примеры в документации как тесты
7. Фикстуры и вспомогательные функции для тестов
8. Property-based тестирование с proptest
9. Мокирование зависимостей: паттерны и крейт mockall
10. Бенчмарки с criterion: измеряем производительность

Модуль 15. Сериализация с serde

8 уроков
1. Зачем нужна сериализация и что умеет serde
2. Подключаем serde и serde_json через cargo add
3. Derive Serialize и Deserialize для своих структур
4. Работа с JSON: from_str, to_string и to_string_pretty
5. Атрибуты serde: rename, default, skip
6. Вложенные структуры, перечисления и опциональные поля
7. Обработка ошибок сериализации и невалидного JSON
8. Динамический JSON через serde_json::Value

Модуль 16. Приложения командной строки с clap

7 уроков
1. Аргументы командной строки: env::args и его пределы
2. Подключаем clap и derive-подход
3. Позиционные аргументы, флаги и опции
4. Значения по умолчанию, обязательные и опциональные аргументы
5. Подкоманды: строим CLI как git
6. Автоматический help, версия и валидация ввода
7. Чтение из stdin и работа с файлами через аргументы

Модуль 17. Конкурентность: потоки и разделяемое состояние

11 уроков
1. Потоки в Rust: thread::spawn и join
2. Передача владения в поток через move
3. Send и Sync: как компилятор гарантирует потокобезопасность
4. Каналы mpsc: обмен сообщениями между потоками
5. Несколько отправителей и паттерн producer-consumer
6. Разделяемое состояние: Arc для многопоточного владения
7. Mutex: взаимное исключение и защита данных
8. RwLock: много читателей или один писатель
9. Scoped threads: потоки, заимствующие стек
10. Атомики: Atomic-типы и порядок памяти базово
11. Параллелизм данных с rayon: par_iter

Модуль 18. Введение в асинхронность

8 уроков
1. Зачем нужен async: конкурентность без потока на задачу
2. Future: значение, которое будет готово позже
3. async и await: синтаксис и что происходит на самом деле
4. Почему future ленивы и нужен исполнитель (runtime)
5. Подключаем tokio и запускаем первую async-функцию
6. Параллельные задачи: tokio::spawn и join!
7. Асинхронный HTTP-запрос с reqwest
8. Async против потоков: когда что выбирать

Модуль 19. Декларативные макросы

6 уроков
1. Зачем нужны макросы и чем они отличаются от функций
2. Первый макрос через macro_rules!
3. Метапеременные и фрагменты: expr, ident, ty и другие
4. Повторения в макросах: $(...)* и разделители
5. Несколько правил в одном макросе и сопоставление
6. Гигиена макросов и типичные подводные камни

Модуль 20. Итоговый проект: CLI-менеджер задач

8 уроков
1. Проект: постановка задачи и архитектура CLI-менеджера задач
2. Модель данных и типы ошибок проекта
3. Хранение задач в JSON через serde
4. Интерфейс командной строки на clap: добавление и просмотр задач
5. Редактирование, удаление и фильтрация задач
6. Покрываем проект тестами: юнит и интеграционные
7. Рефакторинг, обработка ошибок и финальная полировка
8. Куда двигаться дальше: анонс курса «Rust для сеньоров»