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

Внутренняя изменяемость

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 5 тематическим шкалам и подробные объяснения.
Вопрос 1 из 25
Где заканчивается гарантия обычного сценария для «Ячейки Cell»?
Вопрос 2 из 25
Как изменить фрагмент с `conflicting_refcell_borrow_panics`, не перенося ошибку на время выполнения?
RustRust · Тестирование и инструменты Cargo
#[test]
#[should_panic(expected = "already borrowed")]
fn conflicting_refcell_borrow_panics() {
    let x = std::cell::RefCell::new(1);
    let _r = x.borrow();
    let _w = x.borrow_mut();
}
Вопрос 3 из 25
Какая часть механизма «Динамические заимствования RefCell» зафиксирована тестом `RefCell::new`?
RustRust · Динамические заимствования RefCell
let data = RefCell::new(1);
let _read = data.borrow();
assert!(data.try_borrow_mut().is_err());
Вопрос 4 из 25
Как правильно прочитать результат диагностического сценария `conflicting_refcell_borrow_panics`?
RustRust · Тестирование и инструменты Cargo
#[test]
#[should_panic(expected = "already borrowed")]
fn conflicting_refcell_borrow_panics() {
    let x = std::cell::RefCell::new(1);
    let _r = x.borrow();
    let _w = x.borrow_mut();
}

# cargo test conflicting_refcell_borrow_panics -- --exact
Вопрос 5 из 25
Что случится при выполнении `std::cell::RefCell`?
RustRust · Проверка заимствований во время выполнения
use std::cell::RefCell;
let x = RefCell::new(10);
let a = x.borrow_mut();
let b = x.borrow_mut();
println!("{}", *a + *b);
Вопрос 6 из 25
Что нужно проверить отдельно при переносе механизма «Взаимное исключение Mutex» в библиотечный код?
Вопрос 7 из 25
Как обновить фрагмент с `std::sync::Mutex`, чтобы ошибка исчезла по существу?
RustRust · Взаимное исключение Mutex
use std::sync::Mutex;
let value = Mutex::new(1);
{
    let mut guard = value.lock().unwrap();
    *guard += 1;
}
println!("{}", *value.lock().unwrap());
Вопрос 8 из 25
Что нужно проверить отдельно при переносе механизма «Тестирование и инструменты Cargo» в библиотечный код?
Вопрос 9 из 25
Как устранить причину диагностики в строке с `std::cell::RefCell`?
RustRust · Динамические заимствования RefCell
use std::cell::RefCell;
let data = RefCell::new(vec![1, 2]);
let read = data.borrow();
let mut write = data.borrow_mut();
write.push(3);
Вопрос 10 из 25
Какое изменение входа способно поменять вывод о механизме «Динамические заимствования RefCell»?
Вопрос 11 из 25
Какой принцип лежит в основе механизма «Тестирование и инструменты Cargo»?
Вопрос 12 из 25
Что именно подтверждает проверка с `Cell::new`?
RustRust · Ячейки Cell
let text = Cell::new(String::from("old"));
let old = text.replace(String::from("new"));
assert_eq!(old, "old");
assert_eq!(text.into_inner(), "new");
Вопрос 13 из 25
Какое правило Rust точнее всего описывает механизм «Динамические заимствования RefCell»?
Вопрос 14 из 25
Что должно войти в отрицательный тест механизма «Проверка заимствований во время выполнения»?
Вопрос 15 из 25
Какой вывод о механизме «Взаимное исключение Mutex» соответствует модели Rust?
Вопрос 16 из 25
Какую гарантию даёт `std::sync::Arc::new`, а какую нужно проверять отдельно?
RustRust · Взаимное исключение Mutex
let m = std::sync::Arc::new(Mutex::new(0));
let other = m.clone();
let _ = std::thread::spawn(move || { let _g = other.lock().unwrap(); panic!("boom"); }).join();
assert!(m.lock().is_err());
Вопрос 17 из 25
Какой принцип Rust объясняет обычный сценарий для «Проверка заимствований во время выполнения»?
Вопрос 18 из 25
Чем завершится выполнение фрагмента с `std::sync::Mutex`?
RustRust · Взаимное исключение Mutex
use std::sync::Mutex;
let value = Mutex::new(1);
{
    let mut guard = value.lock().unwrap();
    *guard += 1;
}
println!("{}", *value.lock().unwrap());
Вопрос 19 из 25
Какая правка выдержит ревью контракта «Ячейки Cell»?
RustRust · Ячейки Cell
use std::cell::Cell;
let value = Cell::new(3);
value.set(value.get() + 1);
println!("{}", value.get());
Вопрос 20 из 25
На какую часть контракта распространяется проверка `conflicting_refcell_borrow_panics`?
RustRust · Тестирование и инструменты Cargo
#[test]
#[should_panic(expected = "already borrowed")]
fn conflicting_refcell_borrow_panics() {
    let x = std::cell::RefCell::new(1);
    let _r = x.borrow();
    let _w = x.borrow_mut();
}
Вопрос 21 из 25
Какой путь выполнения выберет Rust после `std::cell::Cell`?
RustRust · Ячейки Cell
use std::cell::Cell;
let value = Cell::new(3);
value.set(value.get() + 1);
println!("{}", value.get());
Вопрос 22 из 25
Какой итог гарантирован для указанного входа?
RustRust · Динамические заимствования RefCell
use std::cell::RefCell;
let data = RefCell::new(vec![1, 2]);
let read = data.borrow();
let mut write = data.borrow_mut();
write.push(3);
Вопрос 23 из 25
Какое изменение решает проблему в месте применения `std::cell::RefCell`?
RustRust · Проверка заимствований во время выполнения
use std::cell::RefCell;
let x = RefCell::new(10);
let a = x.borrow_mut();
let b = x.borrow_mut();
println!("{}", *a + *b);
Вопрос 24 из 25
Какая часть механизма «Проверка заимствований во время выполнения» зафиксирована тестом `RefCell::new`?
RustRust · Проверка заимствований во время выполнения
let x = RefCell::new(vec![1]);
{
    let mut data = x.borrow_mut();
    data.push(2);
}
assert_eq!(&*x.borrow(), &[1, 2]);
Вопрос 25 из 25
Какое утверждение о «Ячейки Cell» остаётся верным при смене входных данных?

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

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

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

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