| 01-the-foundation-of-rust | ||
| .gitignore | ||
| README.md | ||
План изучения Rust
Профиль обучения
- Исходный уровень: опытный разработчик.
- Основной опыт: Kotlin / Java.
- Цель: комплексное освоение Rust --- от базового синтаксиса до системного программирования, многопоточности, асинхронности и низкоуровневых механизмов.
- Формат: углублённое изучение с подробным разбором внутренних механизмов.
- Ориентировочная продолжительность: 5--7 месяцев.
- Ориентировочная нагрузка: 6--8 часов в неделю.
Продолжительность будет корректироваться по результатам практических заданий и контрольных точек. Темы, требующие дополнительного внимания, будут изучаться глубже без искусственного ускорения программы.
Цели программы
В ходе обучения:
- освоим модель владения и заимствования Rust;
- разберём систему типов, generics, traits и lifetimes;
- научимся проектировать безопасные и идиоматичные API;
- изучим управление памятью и ресурсами;
- освоим многопоточность и асинхронное программирование;
- разберём границы Safe Rust и Unsafe Rust;
- изучим системное программирование, FFI и взаимодействие с ОС;
- научимся анализировать производительность, аллокации и машинный код;
- сформируем навык самостоятельной работы с официальной документацией и исходным кодом библиотек.
Принципы обучения
- Основой программы станет официальная документация Rust.
- The Rust Programming Language (The Book) будет задавать основной маршрут изучения.
- The Rust Reference будет использоваться для проверки точной семантики языка.
- Документация стандартной библиотеки будет использоваться при изучении API и контрактов типов.
- Cargo Book, Rustonomicon и Async Book будут подключаться по мере необходимости.
- Практические задания будут сопровождать каждый модуль.
- Решения будут проходить разбор и code review.
- Сравнения с Kotlin и Java будут использоваться там, где они помогут понять различия моделей исполнения, типов и управления ресурсами.
- Будем различать гарантии языка, возможности стандартной библиотеки и возможности сторонних crates.
- Unsafe Rust будет изучаться после освоения безопасных механизмов и критериев soundness.
Рекомендуемое распределение времени
- 30% --- теория и чтение официальной документации;
- 45% --- упражнения и разработка;
- 25% --- анализ поведения компилятора, эксперименты и code review.
Программа по модулям
Модуль 1. Фундамент Rust
Ориентировочная продолжительность: 1--2 недели.
Цель: освоим инструментарий Rust, структуру проектов и базовую семантику языка.
Занятия:
- Устройство Rust toolchain:
rustup,rustc, Cargo, linker и LLVM. - Crates, packages, modules и workspaces.
- Компиляция и модель выполнения программы; debug и release profiles.
- Переменные, mutability, shadowing и базовые типы.
- Функции, выражения, statements и управление потоком.
- Tuples, arrays, slices и базовый pattern matching.
Практический результат: создадим CLI-утилиту с обработкой аргументов, файлов и структурированного вывода.
Основная документация: - The Book --- Getting Started - The Book --- Common Programming Concepts - The Cargo Book
Модуль 2. Ownership и Borrowing
Ориентировочная продолжительность: 2--3 недели.
Цель: сформируем точную ментальную модель владения, перемещения значений и заимствования.
Занятия:
- Правила Ownership и область видимости значений.
- Move semantics, Copy и Clone.
- Borrowing и shared references.
- Mutable references и правила эксклюзивного доступа.
- Borrow checker и Non-Lexical Lifetimes (NLL).
- Возврат ссылок, временные значения и ограничения времени жизни.
- Освобождение ресурсов и связь ownership с
Drop.
Практический результат: реализуем собственные структуры данных с разными моделями владения и передачи ссылок.
Основная документация: - The Book --- Understanding Ownership - The Reference --- Destructors - The Reference --- Expressions
Модуль 3. Система типов и обработка ошибок
Ориентировочная продолжительность: 1--2 недели.
Цель: научимся выражать ограничения и состояния программы средствами типовой системы.
Занятия:
- Struct, Enum и способы моделирования данных.
- Pattern matching и exhaustive matching.
Option<T>иResult<T, E>.- Оператор
?и распространение ошибок. - Пользовательские типы ошибок и композиция ошибок.
- Newtype pattern и проектирование типов, исключающих некорректные состояния.
Практический результат: разработаем библиотеку для разбора конфигурации с явной моделью ошибок.
Основная документация: - The Book --- Enums and Pattern Matching - The Book --- Error Handling - Standard Library --- Result
Модуль 4. Generics, Traits и Lifetimes
Ориентировочная продолжительность: 3--4 недели.
Цель: освоим систему абстракций Rust и научимся проектировать обобщённые API.
Занятия:
- Generic types и ограничения типов.
- Определение и реализация traits.
- Trait bounds, associated types и default implementations.
- Static dispatch, dynamic dispatch и monomorphization.
impl Trait,dyn Traitи trait objects.- Dyn compatibility и ограничения динамической диспетчеризации.
- Lifetime annotations и lifetime elision.
- Lifetime bounds и
'static. - Variance, subtyping и более сложные случаи взаимодействия lifetimes.
Практический результат: спроектируем универсальную библиотеку с generics, traits, associated types и продуманным публичным API.
Основная документация: - The Book --- Generics, Traits, and Lifetimes - The Reference --- Trait Bounds - The Reference --- Trait Objects
Модуль 5. Коллекции, итераторы и функциональные возможности
Ориентировочная продолжительность: 1--2 недели.
Цель: освоим стандартные структуры данных и композицию операций над последовательностями.
Занятия:
Vec,VecDeque,HashMapиHashSet.String,strи slices.- Итераторы,
IntoIteratorиIterator. - Iterator adapters, ленивые вычисления и
collect. - Closures и трейты
Fn,FnMut,FnOnce. FromIterator, преобразования и zero-cost abstractions.
Практический результат: реализуем потоковую обработку наборов данных с контролем аллокаций и промежуточных копирований.
Основная документация: - The Book --- Common Collections - The Book --- Iterators - Standard Library
Модуль 6. Управление памятью и ресурсами
Ориентировочная продолжительность: 2--3 недели.
Цель: научимся выбирать подходящую модель владения и управлять разделяемым доступом.
Занятия:
Drop, RAII и детерминированное освобождение ресурсов.Box<T>и владение данными в куче.Rc<T>иArc<T>: разделяемое владение.Cell<T>иRefCell<T>: interior mutability.Mutex<T>иRwLock<T>.- Циклы ссылок и
Weak<T>. - Runtime borrow checking и его отличия от compile-time borrow checking.
PinиUnpin: первоначальная модель и области применения.
Практический результат: реализуем менеджер ресурсов с разделяемым владением, контролируемой мутабельностью и корректным освобождением ресурсов.
Основная документация: - The Book --- Smart Pointers - Standard Library --- std::rc - Standard Library --- std::sync
Модуль 7. Cargo, организация приложений и тестирование
Ориентировочная продолжительность: 1--2 недели.
Цель: научимся организовывать проекты и поддерживать библиотеки и приложения.
Занятия:
- Packages, crates и workspaces.
- Modules, visibility и организация публичного API.
- Dependencies, версии и Cargo.lock.
- Cargo features и conditional compilation.
- Build scripts и конфигурация сборки.
- Unit tests, integration tests и documentation tests.
- Документирование API и подготовка библиотеки к публикации.
- Основы benchmarking.
Практический результат: создадим workspace с несколькими crates, тестами, документацией и разделёнными публичными интерфейсами.
Основная документация: - The Cargo Book - The Book --- Writing Automated Tests - The Book --- Managing Growing Projects
Модуль 8. Concurrency и multithreading
Ориентировочная продолжительность: 2--3 недели.
Цель: освоим безопасное параллельное выполнение и синхронизацию общего состояния.
Занятия:
- Threads и модель выполнения потоков.
- Message passing и channels.
- Shared state concurrency.
SendиSync.- Mutex, RwLock и atomic types.
- Memory ordering и основы модели памяти.
- Scoped threads и передача заимствованных данных между потоками.
- Deadlocks, data races и стратегии синхронизации.
Практический результат: разработаем многопоточный TCP-сервер и пул рабочих потоков.
Основная документация: - The Book --- Fearless Concurrency - The Reference --- Memory Model - Standard Library --- std::thread
Модуль 9. Асинхронное программирование
Ориентировочная продолжительность: 3--4 недели.
Цель: разберём внутреннюю механику async Rust и научимся строить асинхронные приложения.
Занятия:
Futureи модель асинхронного вычисления.async/awaitи преобразование в state machines.- Polling,
ContextиWaker. Pin,Unpinи самоссылочные структуры.- Executors и async runtimes.
- Tokio: tasks, scheduling и управление задачами.
- Cancellation, select и композиция futures.
- Async channels и взаимодействие задач.
- Async traits и ограничения асинхронных интерфейсов.
Практический результат: разработаем асинхронный сетевой сервис с обработкой множества параллельных соединений.
Основная документация: - The Book --- Asynchronous Programming - The Async Book - Tokio Documentation
Модуль 10. Unsafe Rust и FFI
Ориентировочная продолжительность: 2--3 недели.
Цель: научимся работать с низкоуровневыми возможностями языка и строить безопасные абстракции над небезопасными операциями.
Занятия:
- Raw pointers и указательная арифметика.
- Unsafe blocks и unsafe functions.
- Unsafe traits и safety contracts.
- Undefined Behavior и правила aliasing.
- Soundness и безопасные абстракции.
- FFI, C ABI и
repr(C). - Memory layout и работа с неинициализированной памятью.
- Взаимодействие с библиотеками на C и C++.
Практический результат: реализуем небольшой FFI-модуль и безопасную обёртку над низкоуровневым API.
Основная документация: - The Book --- Unsafe Rust - The Rustonomicon - The Reference --- External Blocks
Модуль 11. Системное программирование
Ориентировочная продолжительность: 2--3 недели.
Цель: применим Rust для задач, в которых он особенно интересен: взаимодействия с ОС, сетями, устройствами и системными ресурсами.
Занятия:
- Работа с файлами и файловой системой.
- Processes, signals и системные вызовы.
- TCP, UDP и sockets.
- Бинарные протоколы и сериализация.
- OS abstractions и platform-specific code.
- Memory-mapped files.
- Взаимодействие с устройствами и транспортными интерфейсами.
- Основы Embedded Rust и
no_std.
Практический результат: разработаем универсальный коммуникационный слой с поддержкой нескольких транспортов.
Основная документация: - Standard Library - Rust Embedded Book - The Rust Reference
Модуль 12. Углублённое изучение языка и производительности
Ориентировочная продолжительность: 2--3 недели.
Цель: изучим внутренние механизмы компиляции и научимся обоснованно оптимизировать программы.
Занятия:
- Declarative macros.
- Procedural macros.
- Monomorphization и особенности генерации кода.
- Layout типов и представление данных в памяти.
- LLVM, оптимизации компилятора и машинный код.
- Inlining, codegen units и профили сборки.
- Profiling, benchmarking и анализ аллокаций.
- Оптимизация без нарушения корректности и безопасности.
- Дополнительное знакомство с
no_std,no_mainи внутренним устройством компилятора.
Практический результат: проведём профилирование сквозного проекта, определим узкие места и выполним измеряемые оптимизации.
Основная документация: - The Rust Reference --- Macros - The Rust Compiler Development Guide - Cargo Profiles
Сквозной практический проект
В качестве проекта, который будет развиваться вместе с программой, разработаем Device Communication Framework --- библиотеку для взаимодействия с внешними устройствами через различные транспортные механизмы.
Постепенно сформируем следующие компоненты:
- Device API --- общий интерфейс взаимодействия с устройствами;
- Device Connector --- управление подключениями, состоянием и переподключением;
- USB Transport --- транспортный слой USB;
- TCP Transport --- сетевой транспорт;
- Bluetooth Transport --- транспорт Bluetooth.
По мере изучения языка будем последовательно применять:
- ownership --- для управления подключениями и ресурсами;
- traits --- для транспортных абстракций;
- generics и associated types --- для проектирования API;
- lifetimes --- для работы со ссылками и буферами;
- RAII и Drop --- для освобождения ресурсов;
- Send и Sync --- для многопоточного взаимодействия;
- async --- для обработки нескольких подключений;
- Unsafe и FFI --- для низкоуровневого взаимодействия с системными API.
Архитектура не будет считаться заранее определённой. Будем проектировать её по мере изучения языка, сравнивать варианты и аргументировать выбранные решения.
Контроль усвоения материала
Переход между модулями будет зависеть от результатов, а не только от количества прочитанных глав.
Для каждой ключевой темы проверим пять уровней:
- Понимание: сможем сформулировать концепцию и объяснить её назначение.
- Применение: реализуем решение самостоятельно.
- Анализ: объясним поведение компилятора и причины ограничений.
- Проектирование: выберем подходящую абстракцию и обоснуем API.
- Критическая оценка: сравним альтернативы, компромиссы и ограничения.
Если обнаружатся пробелы, вернёмся к соответствующим темам и закрепим их дополнительными упражнениями.
Формат занятий
Каждое полноценное занятие будет включать:
- Контекст и постановку задачи.
- Теоретическое объяснение.
- Ссылки на конкретные разделы официальной документации.
- Сопоставление с Kotlin/Java, когда оно будет полезно.
- Разбор механики языка, типов, памяти и runtime.
- Примеры корректных и некорректных решений.
- Самостоятельное практическое задание.
- Разбор решения и code review.
Для каждого модуля и полноценного занятия будем формировать отдельный Markdown-конспект с теорией, ссылками, примерами и практическими заданиями. Обычные ответы на вопросы и уточнения не будут автоматически оформляться в отдельные файлы.
Критерии завершения программы
По итогам обучения сможем:
- самостоятельно разрабатывать библиотеки и приложения на Rust;
- понимать и обосновывать решения borrow checker;
- проектировать API с использованием ownership, traits и lifetimes;
- работать с многопоточностью и асинхронностью;
- понимать границы Safe и Unsafe Rust;
- взаимодействовать с системными API и использовать FFI;
- анализировать производительность, аллокации и машинный код;
- читать техническую документацию и исходный код библиотек без постоянной посторонней помощи.
Основные официальные источники
- The Rust Programming Language
- The Rust Reference
- Rust Standard Library
- The Cargo Book
- The Rustonomicon
- The Async Book
- Rustlings
- Rust Compiler Development Guide
- Rust Embedded Book
Первое занятие: устройство Rust toolchain и модель выполнения
программы. Начнём с rustup, rustc, Cargo, linker, LLVM, структуры
crate и различий между debug и release profiles.