FFORGE//RS
← Маршрут

rust / УРОВЕНЬ 4

Unsafe-блок, который не был нужен

ОЦЕНКА40 МИН
01

ТЕОРИЯ / ВОСПРОИЗВЕДЕНИЕ

Что нужно восстановить

  • Сформулировать aliasing-инвариант двух mutable reference
  • Применить `split_at_mut`, сохранив порядок результата

Unsafe переносит доказательство на программиста

Две `&mut T` должны быть валидны, выровнены, находиться в границах и не пересекаться весь lifetime. Компилятор не проверяет raw-pointer код, поэтому invariant обязан быть локальным и проверяемым.

Предпочитайте API, кодирующие доказательство

`split_at_mut` возвращает непересекающиеся slices. После упорядочивания индексов по одному элементу из каждой половины дают безопасные типы без raw-pointer obligations.

КОНТРОЛЬНАЯ ТОЧКА

Как получить два mutable-элемента с самым коротким и ясным safety proof?

ISOLATED RUST 1.96
src/lib.rsРЕДАКТИРОВАНИЕ

02 / РЕВЬЮ КОДА

Сделайте код безопасным

Замените отвергнутый double borrow безопасной реализацией. Верните ссылки в порядке caller; одинаковые или выходящие за границы индексы дают None. Не используйте unsafe.

Инициализация редактора…
ОБЛАЧНЫЙ SANDBOXсеть выключена · 256 МБ · 12 с
1 / 64 KB
ВЫВОД
Runner ждёт отправки кода.