Вы можете обернуть небезопасный код в безопасную функцию. На самом деле есть раздел в книге о ржавчине , в котором рассказывается, как именно.
Ниже приведен пример, скопированный из книги, для краткости изложенный:
use std::slice;
fn split_at_mut(slice: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
let len = slice.len();
let ptr = slice.as_mut_ptr();
assert!(mid <= len);
unsafe {
(slice::from_raw_parts_mut(ptr, mid),
slice::from_raw_parts_mut(ptr.offset(mid as isize), len - mid))
}
}
Для дальнейшего использования команда Rust предоставит, как мне кажется, лучшую документацию в отрасли для ответов на подобные вопросы. Я не могу не подчеркнуть, что новички должны использовать его в полной мере; это редкий и невероятно полезный камень.