Rust для программистов C#: полное учебное руководство
Подробное руководство по изучению Rust для разработчиков, которые уже знакомы с C#. Книга охватывает всё: от базового синтаксиса до продвинутых паттернов. Основной акцент сделан на концептуальных сдвигах и практических различиях между двумя языками.
Обзор курса
- Аргументы в пользу Rust — зачем Rust важен для разработчиков C#: производительность, безопасность и корректность
- Начало работы — установка, инструменты и первая программа
- Базовые строительные блоки — типы, переменные, управление потоком выполнения
- Структуры данных — массивы, кортежи, структуры, коллекции
- Сопоставление с образцом и перечисления — алгебраические типы данных и исчерпывающее сопоставление
- Владение и заимствование — модель управления памятью Rust
- Модули и крейты — организация кода и зависимости
- Обработка ошибок — распространение ошибок на основе Result
- Трейты и обобщения — система типов Rust
- Замыкания и итераторы — паттерны функционального программирования
- Конкурентность — конкурентность без страха благодаря гарантиям системы типов, глубокое погружение в async/await
- Unsafe Rust и FFI — когда и как выходить за рамки безопасного Rust
- Паттерны миграции — реальные паттерны перехода с C# на Rust и постепенное внедрение
- Лучшие практики — идиоматичный Rust для разработчиков C#
Руководство для самостоятельного изучения
Материал подходит и для занятий с преподавателем, и для самостоятельного изучения. Если вы работаете над ним самостоятельно, вот как извлечь из него максимум пользы.
Рекомендации по темпу:
| Главы | Тема | Примерное время | Контрольная точка |
|---|---|---|---|
| 1–4 | Настройка, типы, управление потоком выполнения | 1 день | Вы можете написать CLI-конвертер температур на Rust |
| 5–6 | Структуры данных, перечисления, сопоставление с образцом | 1–2 дня | Вы можете определить перечисление с данными и исчерпывающе разобрать его через match |
| 7 | Владение и заимствование | 1–2 дня | Вы можете объяснить, почему let s2 = s1 делает s1 недействительным |
| 8–9 | Модули, обработка ошибок | 1 день | Вы можете создать многофайловый проект, который передаёт ошибки дальше с помощью ? |
| 10–12 | Трейты, обобщения, замыкания, итераторы | 1–2 дня | Вы можете перевести цепочку LINQ в итераторы Rust |
| 13 | Конкурентность и async | 1 день | Вы можете написать потокобезопасный счётчик с Arc<Mutex<T>> |
| 14 | Unsafe Rust, FFI, тестирование | 1 день | Вы можете вызвать функцию Rust из C# через P/Invoke |
| 15–16 | Миграция, лучшие практики, инструменты | В своём темпе | Справочный материал — обращайтесь к нему при написании реального кода |
| 17 | Итоговый проект | 1–2 дня | У вас есть работающая CLI-утилита, которая получает данные о погоде |
Как работать с упражнениями:
- В главах есть практические упражнения в сворачиваемых блоках
<details>с решениями - Всегда сначала попробуйте решить упражнение и только потом раскрывайте решение. Борьба с проверщиком заимствований — часть обучения, а сообщения компилятора — ваш учитель
- Если вы застряли больше чем на 15 минут, раскройте решение, изучите его, затем закройте и попробуйте снова с нуля
- Rust Playground позволяет запускать код без локальной установки
Индикаторы сложности:
- 🟢 Начальный — прямой перевод концепций из C#
- 🟡 Средний — требует понимания владения или трейтов
- 🔴 Продвинутый — времена жизни, внутреннее устройство async или unsafe-код
Если вы упёрлись в стену:
- Внимательно читайте сообщение компилятора: ошибки Rust исключительно полезны
- Перечитайте нужный раздел. Концепции вроде владения (гл. 7) часто становятся понятны при втором прочтении
- Документация стандартной библиотеки Rust отличная: ищите любой тип или метод
- Более глубокие асинхронные паттерны описаны в сопутствующем курсе Async Rust
Оглавление
Часть I — Основы
1. Введение и мотивация 🟢
- Аргументы в пользу Rust для разработчиков C#
- Типичные болевые точки C#, которые решает Rust
- Когда выбирать Rust вместо C#
- Сравнение философий языков
- Краткая справка: Rust против C#
2. Начало работы 🟢
- Установка и настройка
- Первая программа на Rust
- Cargo против NuGet/MSBuild
- Чтение ввода и аргументов командной строки
- Ключевые слова Rust (необязательный справочник — обращайтесь по необходимости)
3. Встроенные типы и переменные 🟢
- Переменные и изменяемость
- Сравнение примитивных типов
- Типы строк: String и &str
- Вывод и форматирование строк
- Приведение типов и преобразования
- Истинная неизменяемость против иллюзий record
4. Управление потоком выполнения 🟢
5. Структуры данных и коллекции 🟢
- Кортежи и деструктуризация
- Массивы и срезы
- Структуры против классов
- Паттерны конструкторов
Vec<T>противList<T>- HashMap против Dictionary
6. Перечисления и сопоставление с образцом 🟡
- Алгебраические типы данных против объединений C#
- Исчерпывающее сопоставление с образцом
Option<T>для null-безопасности- Защитные условия и продвинутые паттерны
7. Владение и заимствование 🟡
- Понимание владения
- Семантика перемещения против семантики ссылок
- Основы заимствования
- Глубокое погружение в безопасность памяти
- Глубокое погружение во времена жизни 🔴
- Умные указатели, Drop и Deref 🔴
8. Крейты и модули 🟢
- Модули Rust против пространств имён C#
- Крейты против сборок .NET
- Управление пакетами: Cargo против NuGet
9. Обработка ошибок 🟡
- Исключения против
Result<T, E> - Оператор
? - Пользовательские типы ошибок
- Типы ошибок уровня крейта и псевдонимы Result
- Паттерны восстановления после ошибок
10. Трейты и обобщения 🟡
- Трейты против интерфейсов
- Наследование против композиции
- Ограничения обобщений: where и ограничения трейтов
- Распространённые трейты стандартной библиотеки
11. Трейты From и Into 🟡
12. Замыкания и итераторы 🟡
Часть II — Конкурентность и системное программирование
13. Конкурентность 🔴
- Потокобезопасность: соглашение против гарантий системы типов
- async/await: Task в C# против Future в Rust
- Отмена операций: CancellationToken против Drop и select!
- Pin и tokio::spawn
14. Unsafe Rust, FFI и тестирование 🟡
- Когда нужен unsafe
- Взаимодействие с C# через FFI
- Тестирование в Rust и C#
- Property-тестирование и моки
Часть III — Миграция и лучшие практики
15. Паттерны миграции и разборы случаев 🟡
- Распространённые паттерны C# в Rust
- Основные крейты для разработчиков C#
- Стратегия постепенного внедрения
16. Лучшие практики и справочник 🟡
- Идиоматичный Rust для разработчиков C#
- Сравнение производительности: управляемый и нативный код
- Частые ошибки и решения
- Путь обучения и следующие шаги
- Экосистема инструментов Rust
Итоговый проект
17. Итоговый проект 🟡
- Создание CLI-утилиты для погоды — объединяет структуры, трейты, обработку ошибок, async, модули, serde и тестирование в одном работающем приложении