Ядро языка Rust
Владение, заимствование, времена жизни, трейты, многопоточность, async, unsafe.
Ядро описывает сам язык 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.