¿Cómo operar en 2 rebanadas mutables de una matriz Rust?
Tengo una función que necesita operar en dos partes de una sola matriz. El propósito es poder construir un#[nostd]
asignador que puede devolver una porción variable de una matriz más grande a la persona que llama y aferrarse al resto de la matriz para futuras asignaciones.
Aquí hay un código de ejemplo que falla:
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]);
}
El error es el siguiente:
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
Este patrón también puede ser útil para la selección rápida en el lugar, etc.
¿Hay algo inseguro en tener dos referencias mutables a sectores no superpuestos de la misma matriz? Si no hay forma en Rust puro, ¿hay un "seguro"unsafe
encantamiento que le permitirá proceder?