RS Rust  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Обобщения и ограничения

Разбирает обобщённые типы, where-условия, мономорфизацию и выбор между статической и динамической абстракцией. Вопросы распределены между чтением кода, диагностикой компиляции, выбором исправления, граничными случаями и инженерными решениями. Базовый синтаксис соответствует Rust 2024 edition; задания не требуют nightly, если это прямо не сказано.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 5 тематическим шкалам и подробные объяснения.
Вопрос 1 из 25
Как завершится обычная ветвь выполнения после `std::fmt::Display`?
RustRust · Где-условия
fn compare_and_show<T, U>(a: &T, b: &U) -> String
where
    T: PartialEq<U> + std::fmt::Display,
    U: std::fmt::Display,
{
    format!("{a} {} {b}", if a == b { "=" } else { "!=" })
}
Вопрос 2 из 25
Как завершится обычная ветвь выполнения после `String::from`?
RustRust · Мономорфизация
fn identity<T>(x: T) -> T { x }
let a = identity(10u32);
let b = identity(String::from("x"));
Вопрос 3 из 25
Что может сломаться при другом размере входа или порядке действий в «Где-условия»?
Вопрос 4 из 25
Какую регрессию должен ловить «Generic-типы»?
RustRust · Generic-типы
let numbers = Pair { left: 1u8, right: 2u8 };
let words = Pair { left: "a", right: "b" };
Вопрос 5 из 25
Что может сломаться при другом размере входа или порядке действий в «Generic-типы»?
Вопрос 6 из 25
Что должно войти в отрицательный тест механизма «Тестирование и инструменты Cargo»?
Вопрос 7 из 25
К какому результату приводит последовательность операций в этом коде?
RustRust · Выбор абстракции
trait Draw { fn draw(&self) -> String; }
fn render_all(items: &[Box<dyn Draw>]) -> Vec<String> {
    items.iter().map(|x| x.draw()).collect()
}
Вопрос 8 из 25
Как переделать фрагмент, чтобы владение и время жизни читались из сигнатуры?
RustRust · Выбор абстракции
trait Draw { fn draw(&self) -> String; }
fn render_all(items: &[Box<dyn Draw>]) -> Vec<String> {
    items.iter().map(|x| x.draw()).collect()
}
Вопрос 9 из 25
Что именно стало проверяемым благодаря сценарию `compare_and_show`?
RustRust · Где-условия
assert_eq!(compare_and_show(&5i32, &5i32), "5 = 5");
Вопрос 10 из 25
Какая часть механизма «Выбор абстракции» зафиксирована тестом `draw`?
RustRust · Выбор абстракции
fn render_one(item: &impl Draw) -> String { item.draw() }
Вопрос 11 из 25
Какая правка выдержит ревью контракта «Где-условия»?
RustRust · Где-условия
fn compare_and_show<T, U>(a: &T, b: &U) -> String
where
    T: PartialEq<U> + std::fmt::Display,
    U: std::fmt::Display,
{
    format!("{a} {} {b}", if a == b { "=" } else { "!=" })
}
Вопрос 12 из 25
Какая правка выдержит ревью контракта «Мономорфизация»?
RustRust · Мономорфизация
fn identity<T>(x: T) -> T { x }
let a = identity(10u32);
let b = identity(String::from("x"));
Вопрос 13 из 25
Какой принцип лежит в основе механизма «Generic-типы»?
Вопрос 14 из 25
Какое утверждение о «Мономорфизация» остаётся верным при смене входных данных?
Вопрос 15 из 25
Какой риск остаётся после успешной компиляции кода по теме «Выбор абстракции»?
Вопрос 16 из 25
Что отделяет корректное применение «Тестирование и инструменты Cargo» от случайно работающего решения?
Вопрос 17 из 25
Какой рефакторинг исправляет причину сбоя возле `&mut`?
RustRust · Тестирование и инструменты Cargo
/// ```compile_fail
/// let x: Vec<_> = vec![1, 2];
/// let _a = &mut x[0];
/// let _b = &mut x[1];
/// ```
pub struct BorrowRules;
Вопрос 18 из 25
Какое состояние получится после всех действий с `String::from`?
RustRust · Generic-типы
struct Pair<T> { left: T, right: T }
impl<T> Pair<T> {
    fn swap(self) -> Self { Self { left: self.right, right: self.left } }
}
let p = Pair { left: String::from("a"), right: String::from("b") }.swap();
Вопрос 19 из 25
Что система типов не проверит самостоятельно для механизма «Мономорфизация»?
Вопрос 20 из 25
Какое объяснение механизма «Где-условия» не смешивает компиляцию и выполнение?
Вопрос 21 из 25
Что именно стало проверяемым благодаря сценарию `String::from`?
RustRust · Мономорфизация
fn identity<T>(x: T) -> T { x }
let a = identity(10u32);
let b = identity(String::from("x"));

# cargo bloat или анализ nm/objdump для release-сборки
# сравнить число специализаций до и после вынесения общего тела
Вопрос 22 из 25
Что важно понимать о механизме «Выбор абстракции», прежде чем менять код?
Вопрос 23 из 25
Какую гарантию даёт `&mut`, а какую нужно проверять отдельно?
RustRust · Тестирование и инструменты Cargo
/// ```compile_fail
/// let x: Vec<_> = vec![1, 2];
/// let _a = &mut x[0];
/// let _b = &mut x[1];
/// ```
pub struct BorrowRules;
Вопрос 24 из 25
Как правильно прочитать результат диагностического сценария `&mut`?
RustRust · Тестирование и инструменты Cargo
/// ```compile_fail
/// let x: Vec<_> = vec![1, 2];
/// let _a = &mut x[0];
/// let _b = &mut x[1];
/// ```
pub struct BorrowRules;

# cargo test --doc
# cargo test --test public_generics
Вопрос 25 из 25
Что исправить вокруг `String::from`, чтобы граничный вход обрабатывался безопасно?
RustRust · Generic-типы
struct Pair<T> { left: T, right: T }
impl<T> Pair<T> {
    fn swap(self) -> Self { Self { left: self.right, right: self.left } }
}
let p = Pair { left: String::from("a"), right: String::from("b") }.swap();

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу