Unsafe переносит доказательство на программиста
Две `&mut T` должны быть валидны, выровнены, находиться в границах и не пересекаться весь lifetime. Компилятор не проверяет raw-pointer код, поэтому invariant обязан быть локальным и проверяемым.
rust / УРОВЕНЬ 4
ТЕОРИЯ / ВОСПРОИЗВЕДЕНИЕ
Две `&mut T` должны быть валидны, выровнены, находиться в границах и не пересекаться весь lifetime. Компилятор не проверяет raw-pointer код, поэтому invariant обязан быть локальным и проверяемым.
`split_at_mut` возвращает непересекающиеся slices. После упорядочивания индексов по одному элементу из каждой половины дают безопасные типы без raw-pointer obligations.
КОНТРОЛЬНАЯ ТОЧКА
02 / РЕВЬЮ КОДА
Замените отвергнутый double borrow безопасной реализацией. Верните ссылки в порядке caller; одинаковые или выходящие за границы индексы дают None. Не используйте unsafe.
Runner ждёт отправки кода.