BorrowCheck

Независимые тесты по Rust на основе открытых источников. Изучайте язык и тренируйтесь: вопросы, сниппеты кода, объяснения и рейтинг готовности.

Ядро языка Rust

Ядро описывает сам язык Rust в том объёме, в каком его излагают The Book, Rustonomicon и Rust by Example, без привязки к сторонним крейтам и прикладным направлениям. Темы идут от синтаксиса и системы владения через типы, трейты, коллекции и обработку ошибок к умным указателям, многопоточности, async, unsafe и макросам; завершают ядро тестирование, размещение данных в памяти и инструменты. Каждая тема делится на разделы. Вопросы проверяют и базовые правила, и механизм, который за ними стоит, и крайние случаи; к каждому вопросу прилагается справка со ссылками на первоисточники.

  1. Синтаксис, переменные, типы — Базовые конструкции языка: объявление переменных, изменяемость, затенение, скалярные и составные типы, переполнение целых.
  2. Владение, перемещение, Copy/Clone — Владение как исключительная обязанность уничтожить значение; семантика перемещения; чем Copy отличается от Clone.
  3. Заимствование, ссылки, NLL — Правила неизменяемых и изменяемых ссылок, нелексические времена жизни, повторное заимствование, разделение заимствований.
  4. Времена жизни, подтипизация, вариантность — Аннотации и правила пропуска, 'static, подтипизация через заменяемость, три вида вариантности, HRTB.
  5. Структуры, перечисления, сопоставление — Структуры, перечисления с данными, исчерпывающность match, опровержимость и синтаксис шаблонов.
  6. Строки и текст — String и &str, UTF-8 и индексация, символы/байты/графемы, форматирование, строки ОС и C.
  7. Трейты, обобщения, dyn / impl — Определение трейтов, мономорфизация, dyn Trait против impl Trait, dyn-совместимость, когерентность.
  8. Ассоциированные типы, GAT, const generics — Ассоциированные типы против параметров типа, обобщённые ассоциированные типы, константные обобщения.
  9. Коллекции и итераторы — Выбор коллекции, трейт Iterator и ленивость, адаптеры и потребители, collect, формы into_iter, ёмкость.
  10. Замыкания — Режимы захвата, Fn / FnMut / FnOnce, ключевое слово move, замыкания как параметры, указатели на функции.
  11. Преобразования типов — From / Into, TryFrom, приведения as, deref-приведение, AsRef / Borrow, transmute.
  12. Обработка ошибок — Option и Result, оператор ?, паника и раскрутка стека, свои типы ошибок, Box<dyn Error>.
  13. Модули, Cargo, фичи, редакции — Дерево модулей, видимость, крейты и рабочие пространства, фичи и cfg, редакции и MSRV, SemVer.
  14. Умные указатели, внутренняя изменяемость — Box, Rc / Arc, RefCell / Cell, Weak и циклы, Cow, трейт Deref.
  15. Drop, RAII, порядок уничтожения — Трейт Drop, порядок уничтожения, флаги уничтожения, mem::forget и утечки, ManuallyDrop, dropck.
  16. Многопоточность — Потоки, Send / Sync, каналы, Mutex / RwLock, атомики и порядок памяти, гонки данных.
  17. Асинхронность — Future и poll, Waker, Pin / Unpin, раскрытие async fn, безопасность отмены, рантайм.
  18. Unsafe, UB, FFI — Сырые указатели, контракт unsafe, каталог UB, repr и ABI, extern "C", проверка через Miri.
  19. Макросы — macro_rules!, гигиена, повторения, процедурные макросы, derive и атрибуты.
  20. Тесты, бенчмарки, профилирование — Модульные, интеграционные и документационные тесты, should_panic, criterion, профилирование, фаззинг.
  21. Память и раскладка типов — Стек и куча, размеры и выравнивание, типы нулевого размера, ниши, стоимость аллокаций, Sized и DST.
  22. Инструментарий — rustup, clippy и rustfmt, Miri, Playground и Godbolt, команды cargo, rustdoc.

Модули