RS Rust  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Заимствования и ссылки

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

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 4 тематическим шкалам и подробные объяснения.
Вопрос 1 из 20
Где заканчивается гарантия обычного сценария для «Неизменяемые ссылки»?
Вопрос 2 из 20
Что нужно проверить отдельно при переносе механизма «Правила aliasing» в библиотечный код?
Вопрос 3 из 20
Какое предусловие «Время жизни ссылки» необходимо записать явно?
Вопрос 4 из 20
Какой рефакторинг делает владение или ресурс однозначным?
RustRust · Неизменяемые ссылки
let text = String::from("rust");
let a = &text;
let b = &text;
println!("{} {}", a.len(), b.len());
Вопрос 5 из 20
Как лучше всего описать гарантию механизма «Время жизни ссылки»?
Вопрос 6 из 20
Как переписать код с `&mut`, не ослабляя контракт «Правила aliasing»?
RustRust · Правила aliasing
let mut data = [10, 20, 30, 40];
let left = &mut data[0];
let right = &mut data[1];
*left += *right;
Вопрос 7 из 20
Какой принцип лежит в основе механизма «Изменяемые ссылки»?
Вопрос 8 из 20
Что нужно проверить отдельно при переносе механизма «Изменяемые ссылки» в библиотечный код?
Вопрос 9 из 20
Какая минимальная правка остаётся корректной при изменении входных данных?
RustRust · Время жизни ссылки
fn dangling() -> &String {
    let s = String::from("temp");
    &s
}
Вопрос 10 из 20
Какое утверждение о «Неизменяемые ссылки» остаётся верным при смене входных данных?
Вопрос 11 из 20
Какой узкий вывод следует из проверки `String::from`?
RustRust · Время жизни ссылки
fn first<'a>(x: &'a str, _y: &str) -> &'a str { x }
let outer = String::from("outer");
let r;
{
    let inner = String::from("inner");
    r = first(&outer, &inner);
}
println!("{r}");
Вопрос 12 из 20
Почему показанная последовательность не может скомпилироваться?
RustRust · Правила aliasing
let mut data = [10, 20, 30, 40];
let left = &mut data[0];
let right = &mut data[1];
*left += *right;
Вопрос 13 из 20
Где код выходит за границы допустимых типов или заимствований?
RustRust · Время жизни ссылки
fn dangling() -> &String {
    let s = String::from("temp");
    &s
}
Вопрос 14 из 20
Какое правило делает операцию `&mut` некорректной до запуска?
RustRust · Изменяемые ссылки
let mut n = 1;
let a = &mut n;
let b = &mut n;
*a += 1;
*b += 1;
Вопрос 15 из 20
Что можно считать доказанным после успешного выполнения `&mut`?
RustRust · Изменяемые ссылки
let mut n = 0;
{
    let p = &mut n;
    *p += 2;
}
let q = &mut n;
*q += 3;
Вопрос 16 из 20
Какое описание итогового состояния программы верно?
RustRust · Неизменяемые ссылки
let text = String::from("rust");
let a = &text;
let b = &text;
println!("{} {}", a.len(), b.len());
Вопрос 17 из 20
Как исправить реализацию, не полагаясь на случайный порядок выполнения?
RustRust · Изменяемые ссылки
let mut n = 1;
let a = &mut n;
let b = &mut n;
*a += 1;
*b += 1;
Вопрос 18 из 20
Что важно понимать о механизме «Правила aliasing», прежде чем менять код?
Вопрос 19 из 20
Как следует интерпретировать результат проверки `split_at_mut`?
RustRust · Правила aliasing
let mut data = [10, 20, 30, 40];
let (left, right) = data.split_at_mut(1);
left[0] += right[0];
assert_eq!(data[0], 30);
Вопрос 20 из 20
Как правильно прочитать результат диагностического сценария `String::from`?
RustRust · Неизменяемые ссылки
let mut text = String::from("r");
let view = &text;
println!("{view}");
text.push_str("ust");

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

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

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

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