Rust
Для тех, кому нужен предсказуемый системный язык: разбираемся с моделью памяти и доводим дело до работающих проектов.
Программа
- 01
Основы и cargo
Инструменты, синтаксис и привычки, без которых дальше не поедет.
- 1.1 · Rustup, cargo и первый проект
- 1.2 · Переменные, изменяемость и затенение
- 1.3 · Числа, переполнение и приведение типов
- 1.4 · Ветвления и циклы как выражения
- 1.5 · Функции, модули и видимость
- 02
Владение, заимствование и время жизни
Сердце языка: кто владеет памятью, кто её одалживает и как читать ругань компилятора.
- 2.1 · Стек, куча и владение
- 2.2 · Перемещение, Copy и клонирование
- 2.3 · Ссылки и правила заимствования
- 2.4 · Изменяемое заимствование
- 2.5 · Срезы: &str и &[T]
- 2.6 · Время жизни ссылок
- 03
Типы и сопоставление с образцом
Как описывать данные структурами и перечислениями и разбирать их через match.
- 3.1 · Структуры и методы
- 3.2 · Перечисления как сумма типов
- 3.3 · match и исчерпывающность
- 3.4 · Образцы: if let, let else, while let
- 3.5 · Option вместо null
- 04
Коллекции и итераторы
Vec, String, HashMap и ленивые цепочки, которые заменяют ручные циклы.
- 4.1 · Vec: рост, доступ и заимствование элементов
- 4.2 · String и &str на практике
- 4.3 · HashMap и entry API
- 4.4 · Итераторы: лень и цепочки
- 4.5 · iter, iter_mut, into_iter и collect
- 05
Ошибки: Option, Result и оператор ?
Ошибка как обычное значение: где её обрабатывать, где пробрасывать и когда паниковать.
- 5.1 · Result вместо исключений
- 5.2 · Оператор ? и преобразование ошибок
- 5.3 · Свой тип ошибки
- 5.4 · anyhow и thiserror
- 5.5 · Паника, unwrap и expect
- 06
Трейты и обобщения
Как писать код, работающий со многими типами, и как описывать общее поведение.
- 6.1 · Обобщения и мономорфизация
- 6.2 · Трейты: общее поведение
- 6.3 · Границы трейтов и impl Trait
- 6.4 · Ключевые трейты стандартной библиотеки
- 6.5 · Статическая и динамическая диспетчеризация
- 6.6 · Время жизни в структурах и сигнатурах
- 07
Многопоточность и async
Потоки, каналы, разделяемое состояние и асинхронные задачи на tokio.
- 7.1 · Потоки и передача владения
- 7.2 · Каналы
- 7.3 · Arc, Mutex и трейты Send и Sync
- 7.4 · async, await и рантайм
- 7.5 · Задачи, конкурентность и отмена
- 08
Внешний мир: файлы, HTTP, serde
Всё, что нужно, чтобы программа читала данные, ходила в сеть и отвечала на запросы.
- 8.1 · Файлы и потоковый ввод-вывод
- 8.2 · Аргументы командной строки и clap
- 8.3 · serde: JSON, TOML и разбор конфигов
- 8.4 · HTTP-клиент на reqwest
- 8.5 · Веб-сервис на axum и SQLite
Проект в конце
Консольная утилита на Rust: разбирает логи потоком, считает статистику по уровням и умеет фильтровать по времени и образцу.