Roadmap для Rust разработчиков
📖 Общие навыки и знания для разработчика
- Изучите GIT и по возможности другие системы управления версиями
- Должно быть понимание HTTP(S) протокола, и типы запросов (GET, POST, PUT, PATCH, DELETE, OPTIONS)
- Уметь правильно использовать Google для поиска необходимого.
- Пройтись по чеклистам и вопросам на собеседовании
- Посмотрите наш чеклист для разработчиков по подготовке к техническому собеседованию. Там собрано довольно большое количество общей информации для разработчика. которую нужно изучить.
- Статьи по микросервисам
- Статьи про паттерны проектирования
- Статьи по дата структурам
- GRASP принципы
📊 Database fundamentals
Для понимания в чем разница между разными типами БД рекомендуем заюзать по 1 SQL, NoSQL, Graph, и тп. базе данных.
- SQL
- Нормализация
- ACID
- CAP теорема
- OLTP vs OLAP
- Вертикальное и горизонтальное масштабирование
- Dimensional modeling
Relational databases
Non-relational databases
Document databases
🦀 Основы языка Rust
📘 Основы синтаксиса Rust
Rust имеет уникальный синтаксис, который может быть непривычен для людей, привыкших к языкам вроде JavaScript или Python. Сначала следует ознакомиться с основами синтаксиса Rust.
💾 Управление памятью в Rust
Rust использует систему управления памятью без сборщика мусора. Это обеспечивает высокую производительность и предотвращает многие виды ошибок, связанные с памятью.
- Understanding Ownership
- Learning Rust With Entirely Too Many Linked Lists - углубленное изучение правил управления памятью в Rust на примере реализации нескольких различных типов списочных структур.
🔢 Типы данных в Rust
Rust имеет строгую систему типов, которая помогает предотвратить ошибки и обеспечивает ясность кода.
⚠️ Error handling в Rust
Rust использует систему типов для управления ошибками, что отличает его от многих других языков программирования.
- Error Handling in Rust
- rbatis/fast_log — Rust async log High-performance asynchronous logging
- rust-lang/log — Logging implementation for Rust
- seanmonstar/pretty-env-logger — A pretty, easy-to-use logger for Rust.
- slog-rs/slog — Structured, composable logging for Rust
📦 Модули в Rust
Модули в Rust позволяют организовывать код, обеспечивая пространство имен и управление видимостью. Каждый файл с исходным кодом в Rust может быть модулем. Модули позволяют
Детальнее про модули можно посмотреть в документации Rust.
🗃️ Коллекции в Rust
Rust предлагает несколько типов коллекций для хранения данных в памяти. Это включает:
- Векторы (
Vec<T>
): Это динамический массив, который может изменяться в размерах. - Строки (
String
и&str
): Это коллекции символов Unicode. - Хеш-карты (
HashMap<K, V>
): Это коллекции, которые связывают значения (V
) с уникальными ключами (K
). - Списки и очереди: Rust также поддерживает другие структуры данных, такие как связанные списки и очереди, но они обычно не используются напрямую, а предоставляются через внешние библиотеки.
Детальнее про коллекции можно посмотреть в документации Rust.
🚧 Scope в Rust
Scope – относится к области кода, в которой переменная или функция являются доступными. В Rust область видимости обычно определяется блоками кода, заключенными в фигурные скобки {}
. Когда переменная выходит за пределы своей области видимости, она автоматически очищается.
Детальнее про scope можно посмотреть в документации Rust.
➕➖✖️➗ Numeric Operations в Rust
Rust поддерживает все основные числовые операции, включая сложение, вычитание, умножение, деление и остаток от деления. Rust также поддерживает битовые операции, такие как AND, OR и XOR. Кроме того, Rust поддерживает операции сравнения, такие как равенство, неравенство, больше, меньше, больше или равно и меньше или равно.
Детальнее про операции смотрите в документации Rust.
🔄 Control Flow в Rust
Rust поддерживает обычные конструкции управления потоком, включая:
if/else
: условный оператор.loop
: цикл, который повторяется до тех пор, пока не будет выполнено условие выхода.while
: цикл, который повторяется, пока условие истинно.for
: цикл, который повторяется для каждого элемента в коллекции.
📝 Переменные (Variable Bindings) в Rust
В Rust переменные объявляются с помощью ключевого слова let
. К примеру:
let x = 5;
Здесь мы создали переменную x
и присвоили ей значение 5
. По умолчанию все переменные в Rust являются immutable. Это означает, что если вы попытаетесь изменить значение x
, вы получите ошибку компиляции:
let x = 5;
x = 6; // Ошибка: immutable переменная
Если вам нужна mutable переменная, вы можете объявить ее с помощью let mut
:
let mut x = 5;
x = 6; // ОК
Однако стоит использовать mutable переменные осторожно, так как они могут привести к ошибкам в программе. Rust поощряет использование immutable там, где это возможно.
Также Rust поддерживает деструктуризацию через сопоставление с образцом в объявлениях переменных:
let (x, y) = (1, 2);
// `x` и `y` могут быть использованы как отдельные переменные
Это особенно полезно при работе с кортежами и структурами данных.
🔧 Основы разработки на Rust
📦 Использование Cargo, менеджера пакетов Rust
Cargo - это инструмент, который помогает вам создавать проекты Rust, управлять зависимостями и собирать код.
🖥️ Разработка простых приложений и библиотек
Сначала стоит попробовать написать простое приложение или библиотеку на Rust, чтобы понять, как работает язык в целом.
💻 Debugging
- GDB
- gdbgui — Browser based frontend for gdb to debug C, C++, Rust, and go.
- LLDB
- CodeLLDB — A LLDB extension for Visual Studio Code.
✅ Тестирование в Rust
Rust имеет встроенные средства для написания и запуска тестов.
Для изучения деталей можно прочитать следующий материал How to Write Tests и полезные библиотеки при работе с тестами в Rust:
Code Coverage – tarpaulin
Continuous Integration – trust
Фреймворки
- AlKass/polish – Testing/Test-Driven Framework
- cargo-dinghy – Расширение cargo для упрощения запуска library тестов и benches на смартфонах и других устройствах с маленьким процессором
- cucumber – Реализация фреймворка тестирования Cucumber для Rust. Полностью нативная, без внешних зависимостей.
- demonstrate – Declarative Testing Framework
- speculate — An RSpec inspired minimal testing framework for Rust
Моки и тест данные
- asomers/mockall [mockall] — Библиотека mock-объектов для Rust.
- fake-rs — библиотека для генерации фейковых данных
- httpmock — HTTP mocking
- synth — Generate database data declaratively
🌐 Веб разработка
Rust предлагает множество инструментов и библиотек для веб-разработки:
- Rocket наиболее популярный фреймворк, который облегчает создание веб-приложений с помощью предоставления множества полезных функций, включая маршрутизацию, валидацию и обработку запросов.
- yew — фреймворк для создания многофункциональных клиентских приложений в стиле React или Elm.
- actix/actix-web — легковесный async web framework в Rust с поддержкой websocket
🎮 Разработка игр
Rust также активно используется в игровой индустрии. Его низкоуровневые возможности, скорость и безопасность делают его подходящим для создания быстрых и эффективных игровых движков. Кроме того, Rust предлагает несколько библиотек и фреймворков для разработки игр:
- SiegeLord/RustAllegro
- Awesome Quads — Список ссылок на код и ресурсы, связанные с miniquad/macroquad
- Awesome wgpu — Составленный список кода и ресурсов wgpu
- bracket-lib [bracket-lib] - Roguelike Toolkit (RLTK)
- Entity-Component Systems (ECS)
- amethyst/specs — Specs Parallel Entity-Component Systems
- legion — A feature-rich high-performance ECS library with minimal boilerplate
- Fyrox — Rust Game engine 3D
🔌 Embedded
Rust предлагает великолепные возможности для работы с встраиваемыми системами. Это возможно благодаря "нулевой стандартной библиотеке" ("no_std")
, которая исключает те части стандартной библиотеки Rust, где требуется поддержка операционной системы. Это делает его особенно полезным для разработки программного обеспечения для микроконтроллеров и другого аппаратного обеспечения, где доступные ресурсы ограничены.
Также стоит отметить, что Rust имеет отличные механизмы безопасности, которые могут помочь избежать классических ошибок при работе с Embedded, таких как доступ к некорректным адресам памяти или ошибки работы с многопоточностью.
Полезные ресурсы и библиотеки:
- https://github.com/rust-embedded
- https://github.com/rust-embedded/awesome-embedded-rust
- Arduino
- avr-rust/ruduino компоненты для Arduino Uno.
- Cross-compiling
- japaric/rust-cross — cross compiling Rust programs
- japaric/xargo — an effortless cross-compilation of Rust programs to custom bare-metal targets like ARM Cortex-M
- Espressif
- esp-rs home to a number of community projects enabling the use of the Rust programming language on various SoCs and modules produced by Espressif Systems.
- nRF
- nrf-rs/nrf-hal — A Rust HAL for the nRF family of devices
🎮 Эмуляторы
- CHIP-8
- ColinEberhardt/wasm-rust-chip8 — A WebAssembly CHIP-8 emulator
- starrhorne/chip8-rust — rust chip8 emulator
- Commodore 64 - kondrak/rust64
- Flash Player – Ruffle
- Gameboy
- Gekkio/mooneye-gb
- mohanson/gameboy — Full featured Cross-platform GameBoy emulator
- Gameboy Advance
- michelhe/rustboyadvance-ng - Gameboy Advance emulator с desktop, android и WebAssembly поддержкой.
- GameMaker – OpenGMK
- Intel 8080 CPU
- mohanson/i8080 — Intel 8080 cpu emulator
- iOS – touchHLE
- iPod – clicky
- NES
- PlayStation 4 – Obliteration
💰 Работа с Криптой в Rust
Полезные библиотеки, которые могут пригодиться при работе с криптовалютой с помощью Rust:
- beerus - Beerus это клиент StarkNet Light
- Bitcoin Satoshi's Vision [sv] — Библиотека Rust для работы с Bitcoin SV.
- cairo - Cairo - это первый Turing-complete язык для создания программ для общих вычислений.
- cairo-rs — Rust реализация Cairo VM
- ChainX — Полностью децентрализованное Interchain Crypto Asset Management на Polkadot
- CITA — Высокопроизводительное ядро блокчейна для корпоративных пользователей.
- coinbase-pro-rs — Клиент Coinbase на Rust, поддерживает sync/async/websocket
- electrumrs — Реализация Electrum Server в Rust.
- ethabi - Енкодинг и декодинг смарт-контрактов.
- ethaddrgen — Ethereum vanity address generator
- Holochain — P2P альтернатива до blockchain.
- Lighthouse — Rust Ethereum Consensus Layer (CL) Client
- near/nearcore — децентрализованная платформа смарт-контрактов для 'low-end' мобильных устройств
- revm - Revolutionary Machine (revm) - это быстрая виртуальная машина Ethereum, написанная на языке rust.
- rust-bitcoin — Библиотека с поддержкой де/сериализации, парсинга и выполнения на структурах данных и сетевых сообщениях, связанных с Bitcoin.
- svm-rs - Solidity-Compiler Version Manager.
- wagyu [wagyu] — Библиотека Rust для создания криптовалютных кошельков
📚 Книги и дополнительные материалы для изучения Rust
- Книги "The Rust Programming Language" и "Rust by Example" - отличные стартовые точки для изучения Rust.
- Документация по библиотеке Rust помогут вам понять основы языка.
- Beginning Rust Programming (2021)
- awesome-rust - большой набор полезных ссылок библиотек для Rust