Как я изучал RUST в 2025
Этот пост — обзор материалов, которые помогли мне систематизировать знания по Rust. Если вы только начинаете знакомство с Rust, рекомендую начать с отличного гайда для начинающих Learning Rust in 2024.
Мой опыт до нового этапа в изучении RustPermalink
До этого я уже:
- Практиковался по методичке, основанной на руководстве по Rust от команды Android в Google. Все результаты заданий публиковал в репозиторий.
- Написал игру на WASM, подробнее можно почитать тут.
- Участвовал в контестах.
БазаPermalink
В закладках уже запылился курс Программирование на Rust от Computer Science Center, к которому прилагается git с презентациями. Пришло время его пройти: подтянуть теорию и посмотреть лекции.
Курс помогает понять, почему язык устроен именно так, а не иначе. Затрагивает вопросы, связанные с внутренностями компилятора и механизмами языка, что систематизирует знания и показывает взаимосвязи между разными концепциями.
До этого я изучал Rust по практическим примерам, слепо следуя правилам для корректной работы программ. Этот курс связывает все в единую картину.
По ходу просмотра лекций я дополнял свой репозиторий с учебными примерами.
Дополнительное чтениеPermalink
В лекциях автор упоминает несколько источников для самостоятельного изучения, преимущественно посвящённых общим вопросам программирования. Хотя эти материалы факультативны, они заслуживают внимания.
- Документация Iter из std
- An Analysis of Production Failures in Distributed Data-Intensive Systems
В видео-презентации демонстрируется важность обработки ошибок на примерах. - The Error Model
Обширная статья, анализирующая различные модели обработки ошибок: возвращаемые коды, исключения (checked/unchecked), аварийное завершение, комбинированный подход, ассерты, инварианты и система типов. - Interface Dispatch
Описаны три способа реализации виртуальных таблиц в различных языках. - The Strict Aliasing Situation is Pretty Bad
Введение в aliasing и правила строгого алиасинга в C. - Focusing on ownership
Обсуждаются проблемы “mut” в Rust и предлагается рассматривать ссылки через призму уникальности, а не мутабельности. Тема раскрыта чуть проще в статье Rust: A unique perspective. - In Rust, ordinary vectors are values
Анализ различного поведения при перемещении обычных значений и коллекций. - Race Condition vs. Data Race
Пример, иллюстрирующий разницу между гонками данных и гонками потоков. - Какого цвета ваша функция?
Рассматривается проблема вызова обычных и async функций в языках программирования.
Домашняя работаPermalink
В курсе упоминаются задания, основанные на статье пишем RayTracer на C++ за выходные. Учитывая мой опыт с C++, переписать код на Rust не составило труда. Тем более, что я уже писал RayTracer’ы на C++ по другим материалам и даже портировал физический движок box2d-lite с C на Rust.
Главный вызов домашней работы — как разделить типы Color
и Coords
, чтобы они наследовали все методы Vec3
. В итоге вечером придумал аналог PhantomData
. Просто каеф.
Пришлось немного побороться с <dyn T>
.
В конце прикрутил многопоточность и выложил код на GitHub.

Углубляем теориюPermalink
На лекциях я не остановился, знаний много не бывает.
Блог pretzelhammerPermalink
Первым дополнительным источником стал блог pretzelhammer. Из уже упомянутой статьи Learning Rust in 2024, я на будущее отложил ссылку на exercism с задачами. В статье приводится перечень наиболее интересных задач.
На этом полезность блога не заканчивается. Определенно стоит прочесть следующие посты:
The Rust Programming LanguagePermalink
Эта книга — основа изучения Rust, по задумкам авторов. Первая попытка её прочитать была неудачной, я же начинал изучение языка с руководства по Rust от команды Android в Google.
Со второй попытки The Rust Programming Language дался, и я его прочитал. Советую читать интерактивную версию.
Отметил, что часть про async
явно дописывали позже — заметно по объёму.
Async и tokioPermalink
С async
и корутинами я знаком только в теории, поэтому мне нужны были дополнительные материалы. Я их нашел на сайте крейта tokio. Перевод на русский доступен здесь.
С первого раза понять и осмыслить весь код из данного цикла статей не удалось. Собираюсь вернуться к нему чуть позже.
Общее понимание, как работает tokio
и async rutime
появилось. Код из этой библиотеки и упрощенный пример реализации executor'a
с task'ами
моя голова на этом этапе не смогла принять. Аналогичная ситуация сложилась с паттерном Visitor
и библиотекой сериализации serde
, где этот паттерн используется в сериализаторе/десиализаторе, но об этом ниже.
ПаттерныPermalink
В этом разделе описаны материалы по Rust-way коду. Паттерны “in general” я рассматривал в отдельной заметке.
Начал изучение с Rust Design Patterns — книга неидеальна, но другой комплексной альтернативы я не нашел.
Паттерн Visitor
взорвал мне мозг. Написал его в java-стиле, но в Rust это кажется избыточным. Затем добрался до паттерна Fold
, который как Visitor
, отделяет проход по гетерогенным данным от операций над каждым элементом. Отличается тем, что в результате Fold
поглащает исходную структуру и создает новую в новом формате. Реализация Fold получилась более Rust-овая, но все равно, что то не то.
Паттерн Builder
сразу пригодился — добавил его в свой Ray tracer.
Видео по паттернамPermalink
Я искал качественные видео о паттернах в Rust. Несмотря на то, что для C++ таких материалов предостаточно, по Rust найти их быстро я не смог. Из просмотренной тройки меня удовлетворило видео Pascal Hertleif – Writing Idiomatic Libraries in Rust, где раскрываются идеи минимального набора трейтов для создания библиотечного типа и концепция «автомата на типах».
Остальные два ролика, PDXRust September 2016: Nick Cameron – Design Patterns in Rust и Rust Programming Techniques, в основном повторяют то, что уже знакомо.
The RustonomiconPermalink
Книжка во введении громко заявляет:
The Rustonomicon digs into all the awful details that you need to understand when writing Unsafe Rust programs.
Материал сначала кажется сложным, ты думаешь что узнаешь тайные секреты Unsаfe кода. На самом деле все намного прозаичней и проще.
Большая часть материала должна быть уже знакома по лекциями от Computer Science Center и статьям от retzelhammer. Поэтому читается и понимается все нормально.
Порадовали последние главы с разобором базовых типов: вектора, arc. Жаль, что mutex еще не подвезли.
Дальнейшие идеи для практикиPermalink
Надо будет написать ray tracer по статьям на хабре, хотя лучше следовать на github, где все в одной статье с правками.
Я уже писал этот код на C++, как и другие туториалы от автора: шутер на raycasting(на macrosquad нужно сделать), рендер.
Medium/Hard задачи из списка в курсе по Rust на площадке exercism
В итогеPermalink
Rust мне нравится. Borrow checker не пугает, но async
, функциональные подходы и примитивы синхронизации нужно закреплять практикой.