раздел 23

Rust

Системный Rust по лесенке блоков: от владения, трейтов и модульной системы через биты и машинный уровень, Rustonomicon и макросы к трём проектам (эмулятор учебного процессора с HAL, эмулятор NES, сетевой игровой движок со своим протоколом), async изнутри, атомикам на уровне книги Мары Бос и Rust в браузере через WebAssembly. Безопасность памяти без сборщика мусора, нулевые абстракции. Сверху пристыкован подкластер Functional DDD на Rust (доменные типы, Decider, event store на Postgres, CQRS-проекции) на сквозном домене бронирования отеля и отдельный урок про внедрение зависимостей (трейты, экстракторы axum, системы bevy и регистрация до main). Дальше раздел Web3 на Rust.

80 уроков80 тем · 14 кластеров

Начать раздел
Хочу пройти

Раздел открыт для всех. Войди, чтобы отмечать пройденные уроки, вести заметки и решать задачи в редакторе. войти

Мастерская: Кузница

этапов 0 из 23

Мастерская: Пробирная палата

этапов 0 из 8

Мастерская: Подвалы

этапов 0 из 10

Мастерская: Чертёжная

этапов 0 из 6

Мастерская: Автоматон

этапов 0 из 10

Мастерская: Ярмарочный автомат

этапов 0 из 10

Мастерская: Почтовая станция

этапов 0 из 9

Мастерская: Цех на сто горнов

этапов 0 из 8

Мастерская: Турнир

этапов 0 из 8

Мастерская: Шедевр

этапов 0 из 5

Уроки раздела

Язык, владение, типы

Изделие «Кузница», крейт forge

  1. Зачем Rust и первая программаJ~35 мин
  2. Значения и типы: числа, кортежи, mut и выраженияJ~30 мин
  3. Поток управления: циклы и matchJ~15 мин
  4. Владение: move, Copy, drop и RAIIJ~35 мин
  5. Заимствование, ссылки и срезыM~35 мин
  6. Структуры и методыJ~40 мин
  7. Перечисления и pattern matchingM~35 мин
  8. Коллекции и строкиM~35 мин
  9. Обработка ошибок: Result, ? и свои типыM~35 мин

Трейты, дженерики, итераторы

Изделие «Кузница», крейт forge

  1. Дженерики и ограниченияM~35 мин
  2. Что такое трейтM~35 мин
  3. Печать и конверсии: Display, Clone, From и FromStrM~20 мин
  4. Сравнение, операторы и newtypeM~30 мин
  5. Трейт-объекты и диспетчеризацияS~35 мин
  6. Итераторы и замыканияMS~45 мин

Модули, проекты, идиомы

Изделие «Кузница», крейт forge

  1. Модули, крейты и видимостьM~30 мин
  2. Cargo, workspaces и архитектура проектаM~45 мин
  3. Экосистема: serde, clap, tokio и docs.rsM~40 мин
  4. Функциональный интерфейс через владениеMS~40 мин
  5. Идиоматичный и защищённый RustS~60 мин
  6. Тип одного варианта: компоненты путиS~40 мин

Биты и машина

Изделие «Пробирная палата», крейт klejmo

  1. Биты, байты и endiannessM~35 мин
  2. Целые числа и дополнительный кодM~35 мин
  3. Вещественные числа и IEEE-754MS~30 мин
  4. Машинный уровень: ассемблер и дизассемблерS~40 мин
  5. Раскладка в памяти и reprS~35 мин
  6. Кодируем битики: bit reader, varint, zigzagMS~50 мин

Глубокий core

Изделие «Подвалы», крейт sklad

  1. Умные указатели и внутренняя мутабельностьMS~50 мин
  2. Связный список тремя способамиS~50 мин
  3. Лайфтаймы вглубьS~50 мин
  4. ВариантностьL~45 мин
  5. DST и толстые указателиS~45 мин
  6. Маркерные трейтыS~55 мин
  7. Unsafe RustL~50 мин
  8. Дженерики на максималкахL~45 мин

Макросы

Изделие «Чертёжная», крейт chertezh

  1. Декларативные макросыS~35 мин
  2. Гигиена и паттерны макросовS~25 мин
  3. Процедурные макросы: deriveS~30 мин
  4. Attribute-like и function-like макросыS~30 мин

Проект 1 · эмулятор CPU и HAL

Изделие «Автоматон», крейт bcpu

  1. Архитектура эмулятораS~50 мин
  2. Состояние процессора и шинаS~40 мин
  3. Декодирование инструкцийS~60 мин
  4. MMIO и прерыванияS~30 мин
  5. HAL как набор трейтовS~40 мин
  6. Отладчик и тестированиеMS~55 мин

Проект 2 · эмулятор NES

Изделие «Ярмарочный автомат», крейт our-nes

  1. Архитектура NESS~35 мин
  2. Ядро 6502S~150 мин
  3. Картридж и мапперыS~110 мин
  4. PPU и фонL~120 мин
  5. СпрайтыL~30 мин
  6. APU и звукS~140 мин
  7. Сборка и запуск игрыS~150 мин

Async вглубь

Изделие «Почтовая станция», крейт pochta

  1. Async-десахаринг: машина состоянийS~45 мин
  2. Pin и самоссылающиеся структурыL~40 мин
  3. Свой исполнительS~70 мин
  4. Tokio изнутриS~50 мин
  5. Отмена и select!S~25 мин
  6. Stream и каналыMS~25 мин

Многопоточность и атомики

Изделие «Цех на сто горнов», крейт ceh

  1. Потоки, Send и Sync: что обещают эти трейтыS~40 мин
  2. Разделяемое состояние: Arc, Mutex и RwLockS~40 мин
  3. Атомики и порядки памятиL~35 мин
  4. Строим примитивы синхронизацииL~30 мин
  5. Lock-free: структуры без замковL~35 мин
  6. Аппаратная модель: кэши, MESI и false sharingL~35 мин

Сети и Проект 3 · игровой протокол

Изделие «Турнир», крейт turnir

  1. Сокеты с нуля: TCP, UDP и байты на проводеS~20 мин
  2. Проектируем игровой протокол: varint, биты и дельтыS~25 мин
  3. Сериализация: кодек, порядок байт и граница доверияMS~20 мин
  4. Сервер на tokio: авторитетный тик, рассылка, backpressureS~20 мин
  5. Netcode: предсказание, реконсиляция, лаг-компенсацияS~20 мин
  6. Надёжность поверх UDP: acks, переотправка, перегрузкаS~20 мин

WASM: Rust в браузере

Изделие «Шедевр», крейт shedevr

  1. Что такое WebAssembly: стековая машина и линейная памятьS~30 мин
  2. Мост Rust и JS: wasm-bindgen, срезы без копий и колбэкиS~40 мин
  3. Эмулятор в браузере: кадр в canvas, ввод и звукS~35 мин
  4. Мощь и пределы WASM: бенчмарк, размер, SIMD, потокиL~30 мин
  5. Капстоун: переиспользуемый движок виджетов и крючок для Web3S~35 мин

Functional DDD на Rust

  1. Доменные типы на Rust: newtype, TryFrom, приватные поляS~60 мин
  2. Decider на Rust: decide, evolve, replay и явное времяS~60 мин
  3. Event store на Postgres: sqlx, транзакция, оптимистичная блокировкаS~50 мин
  4. Async-проекции и CQRS на Rust: broadcast, tokio, watchL~50 мин

Rust-идиомы: DI и жизнь до main

  1. Внедрение зависимостей в Rust: трейты, axum, bevy и жизнь до mainL~45 мин

Понятия курса

Понятия разобраны внутри уроков. Нажми на понятие, чтобы открыть урок, где оно объясняется.

Язык, владение, типы

Трейты, дженерики, итераторы

Модули, проекты, идиомы

Биты и машина

Глубокий core

  • Умные указатели и внутренняя мутабельностьBox, Rc, RefCell, Cell, Cow, когда нужна interior mutability, Weak и разрыв циклов Rc, цена подсчёта ссылок.урок 28 · Умные указатели и внутренняя мутабельностьопираются: урок 29
  • Лайфтаймы вглубьПодтипизация времён жизни, elision, static, borrow checker как граф ограничений, ловушки с возвратом ссылок, лайфтаймы в структурах.урок 30 · Лайфтаймы вглубьопираются: урок 31
  • Маркерные трейтыSend, Sync, Sized, Copy, Unpin, auto-трейты и негативные impl, PhantomData как инструмент моделирования инвариантов. Супертрейты, модульные и внешние доказательства, ловушка самодоказательства impl.урок 33 · Маркерные трейтыопираются: урок 34
  • Связный список тремя способамиБезопасный на Box, разделяемый на Rc и RefCell, и unsafe на сырых указателях. Учебник too-many-lists как повод подружиться с borrow checker.урок 29 · Связный список тремя способамиопираются: урок 30
  • DST и толстые указателиstr и [T], unsized coercion, раскладка толстого указателя (данные плюс метаданные), ?Sized, связь с object safety.урок 32 · DST и толстые указателиопираются: урок 33
  • ВариантностьКовариантность, контравариантность, инвариантность, почему &mut T инвариантен, роль PhantomData, как это связано с безопасностью.урок 31 · Вариантностьопираются: урок 32
  • Дженерики на максималкахАссоциированные типы против дженерик-трейтов, GAT, const generics, HRTB и for<a>, проблема выражения и её цена, type-level паттерны.урок 35 · Дженерики на максималкахопираются: урок 36
  • Unsafe RustСырые указатели, неопределённое поведение, правила алиасинга и Stacked/Tree Borrows, MaybeUninit, контракт безопасной обёртки, miri, FFI-граница. Условия unsafe trait и ответственность unsafe impl перед безопасным потребителем.урок 34 · Unsafe Rustопираются: урок 35, урок 80

Макросы

Проект 1 · эмулятор CPU и HAL

Проект 2 · эмулятор NES

  • Архитектура NES6502, PPU, APU, картридж и мапперы, шина и зеркалирование, формат iNES, обзор проекта.урок 46 · Архитектура NESопираются: урок 47
  • Картридж и мапперыiNES и NES 2.0, PRG и CHR ROM, переключение банков, NROM, MMC1, UxROM, абстракция маппера как трейт.урок 48 · Картридж и мапперыопираются: урок 49
  • Сборка и запуск игрыКонтроллеры, кадровый тайминг, синхронизация CPU, PPU и APU, запуск реальной игры, профилирование и оптимизация горячего цикла.урок 52 · Сборка и запуск игрыопираются: урок 53
  • Ядро 6502Полный набор официальных опкодов, флаги, режимы адресации, такты, страничные переходы, прохождение nestest до зелёного.урок 47 · Ядро 6502опираются: урок 48
  • APU и звукКаналы pulse, triangle, noise, DMC, envelope и sweep, генерация и ресемплинг звука, вывод аудио без щелчков.урок 51 · APU и звукопираются: урок 52
  • СпрайтыOAM, sprite evaluation, sprite 0 hit, приоритеты и прозрачность, ограничение восьми спрайтов на строку, тонкости тайминга.урок 50 · Спрайтыопираются: урок 51
  • PPU и фонПалитры, nametables и attribute tables, паттерны и тайлы, конвейер рендера фона, скроллинг и регистры PPU, тайминг сканлайнов.урок 49 · PPU и фонопираются: урок 50

Async вглубь

Многопоточность и атомики

Сети и Проект 3 · игровой протокол

WASM: Rust в браузере

Functional DDD на Rust

Rust-идиомы: DI и жизнь до main

  • Внедрение зависимостей: трейты, axum, bevy, жизнь до mainDI как ответ на вопрос кто решает откуда придёт зависимость, четыре уровня развязки: руками, трейт с дженериком (бесплатный статический DI), трейт-объект dyn, экстракторы axum и системы bevy как DI по сигнатуре, и регистрация до main через линкер-секции, inventory и linkme с ловушкой dead-code elimination.урок 80 · Внедрение зависимостей в Rust: трейты, axum, bevy и жизнь до main