Como operar em 2 fatias mutáveis de uma matriz Rust?
Eu tenho uma função que precisa operar em duas partes de uma única matriz. O objetivo é ser capaz de construir um#[nostd]
alocador que pode retornar uma fatia variável de uma matriz maior para o chamador e ficar com o restante da matriz para futuras alocações.
Aqui está um código de exemplo que falha:
fn split<'a>(mut item: &'a mut [i32], place: usize) -> (&'a mut [i32], &'a mut [i32]) {
(&mut item[0..place], &mut item[place..])
}
fn main() {
let mut mem: [i32; 2048] = [1; 2048];
let (mut array0, mut array1) = split(&mut mem[..], 768);
array0[0] = 4;
println!("{:?} {:?}", array0[0], array1[0]);
}
o erro é o seguinte:
error[E0499]: cannot borrow `*item` as mutable more than once at a time
--> src/main.rs:2:32
|
2 | (&mut item[0..place], &mut item[place..])
| ---- ^^^^ second mutable borrow occurs here
| |
| first mutable borrow occurs here
3 | }
| - first borrow ends here
Esse padrão também pode ser útil para a classificação rápida no local etc.
Existe algo inseguro em ter duas referências mutáveis para fatias sem sobreposição da mesma matriz? Se não há maneira pura de ferrugem, existe um "seguro"unsafe
encantamento que lhe permitirá prosseguir?