BorrowCheck
Независимые тесты по Rust на основе открытых источников. Изучайте язык и тренируйтесь: вопросы, сниппеты кода, объяснения и рейтинг готовности.
Ядро языка Rust
Ядро описывает сам язык Rust в том объёме, в каком его излагают The Book, Rustonomicon и Rust by Example, без привязки к сторонним крейтам и прикладным направлениям. Темы идут от синтаксиса и системы владения через типы, трейты, коллекции и обработку ошибок к умным указателям, многопоточности, async, unsafe и макросам; завершают ядро тестирование, размещение данных в памяти и инструменты. Каждая тема делится на разделы. Вопросы проверяют и базовые правила, и механизм, который за ними стоит, и крайние случаи; к каждому вопросу прилагается справка со ссылками на первоисточники.
- Синтаксис, переменные, типы — Базовые конструкции языка: объявление переменных, изменяемость, затенение, скалярные и составные типы, переполнение целых.
- Владение, перемещение, Copy/Clone — Владение как исключительная обязанность уничтожить значение; семантика перемещения; чем
Copyотличается отClone. - Заимствование, ссылки, NLL — Правила неизменяемых и изменяемых ссылок, нелексические времена жизни, повторное заимствование, разделение заимствований.
- Времена жизни, подтипизация, вариантность — Аннотации и правила пропуска,
'static, подтипизация через заменяемость, три вида вариантности, HRTB. - Структуры, перечисления, сопоставление — Структуры, перечисления с данными, исчерпывающность
match, опровержимость и синтаксис шаблонов. - Строки и текст —
Stringи&str, UTF-8 и индексация, символы/байты/графемы, форматирование, строки ОС и C. - Трейты, обобщения, dyn / impl — Определение трейтов, мономорфизация,
dyn Traitпротивimpl Trait, dyn-совместимость, когерентность. - Ассоциированные типы, GAT, const generics — Ассоциированные типы против параметров типа, обобщённые ассоциированные типы, константные обобщения.
- Коллекции и итераторы — Выбор коллекции, трейт
Iteratorи ленивость, адаптеры и потребители,collect, формыinto_iter, ёмкость. - Замыкания — Режимы захвата,
Fn/FnMut/FnOnce, ключевое словоmove, замыкания как параметры, указатели на функции. - Преобразования типов —
From/Into,TryFrom, приведенияas, deref-приведение,AsRef/Borrow,transmute. - Обработка ошибок —
OptionиResult, оператор?, паника и раскрутка стека, свои типы ошибок,Box<dyn Error>. - Модули, Cargo, фичи, редакции — Дерево модулей, видимость, крейты и рабочие пространства, фичи и
cfg, редакции и MSRV, SemVer. - Умные указатели, внутренняя изменяемость —
Box,Rc/Arc,RefCell/Cell,Weakи циклы,Cow, трейтDeref. - Drop, RAII, порядок уничтожения — Трейт
Drop, порядок уничтожения, флаги уничтожения,mem::forgetи утечки,ManuallyDrop, dropck. - Многопоточность — Потоки,
Send/Sync, каналы,Mutex/RwLock, атомики и порядок памяти, гонки данных. - Асинхронность —
Futureиpoll,Waker,Pin/Unpin, раскрытиеasync fn, безопасность отмены, рантайм. - Unsafe, UB, FFI — Сырые указатели, контракт
unsafe, каталог UB,reprи ABI,extern "C", проверка через Miri. - Макросы —
macro_rules!, гигиена, повторения, процедурные макросы,deriveи атрибуты. - Тесты, бенчмарки, профилирование — Модульные, интеграционные и документационные тесты,
should_panic,criterion, профилирование, фаззинг. - Память и раскладка типов — Стек и куча, размеры и выравнивание, типы нулевого размера, ниши, стоимость аллокаций,
Sizedи DST. - Инструментарий —
rustup,clippyиrustfmt, Miri, Playground и Godbolt, командыcargo,rustdoc.
Модули
- Устройство async-рантаймов — Исполнители, планировщики, реакторы, work-stealing, как устроен Tokio.
- Блокчейн: Bitcoin — Устройство блокчейна Bitcoin и его реализация на Rust.
- Веб-бэкенд — HTTP-серверы на axum, middleware, состояние, тестирование обработчиков.
- Алгоритмы — Сортировка, поиск, графы, динамическое программирование и структуры данных — и их реализация на Rust с учётом владения, заимствования и итераторов.
- DeFi: Solana — Программы Solana, аккаунты, Anchor.
- Распределённый консенсус — Raft: лидер, журнал, репликация; реализации на Rust.
- Встраиваемые системы —
no_std, HAL, прерывания, работа с регистрами. - Идиомы и паттерны — Идиоматичный Rust, паттерны проектирования и антипаттерны, рекомендации по API — по Rust Design Patterns, Effective Rust и API Guidelines.
- Сети: TCP/IP и сокеты — Физика сокета, состояния TCP, буферы ядра, неблокирующий ввод-вывод в Tokio.
- Наблюдаемость — Метрики, трассировка, логирование:
tracing, Prometheus, Grafana. - Производительность и профилирование — Методика измерений,
criterion, flamegraph, типичные оптимизации. - Поисковые индексы — Инвертированный индекс, токенизация, ранжирование, структуры данных для поиска.
- WebAssembly — Компиляция в WASM,
wasm-bindgen, взаимодействие с JS. - Консольные утилиты — Аргументы и
clap, потоки ввода-вывода, коды выхода, сигналы, вывод для человека и для машины, упаковка бинарника.