Gibt es eine Möglichkeit, einen Wert vor- und nachzuspeichern?

Ich suche derzeit inmehr Zeug mit Arrays tun, aber ich denke, die Leistung dieser Operationen könnte noch besser sein, wenn wir uns irgendwie in ein @ verwandeln könntLeaked<T> das Array von vorne, nur um es zu entleeren, wenn die Funktion endet. Dies würde es uns ermöglichen, die Leckverstärkung zu verwenden, ohne a) Unsicherheit einzuführen und b) ein @ einzurichtecatch_panic(_). Ist das irgendwie in Rust möglich?

Zum Beispiel ein generisches Array aus einem Iterator erstellen (dies funktioniert offensichtlich nicht):

#[inline]
fn map_inner<I, S, F, T, N>(list: I, f: F) -> GenericArray<T, N>
where I: IntoIterator<Item=S>, F: Fn(&S) -> T, N: ArrayLength<T> {
     unsafe {
        // pre-leak the whole array, it's uninitialized anyway
        let mut res : GenericArray<Leaked<T>, N> = std::mem::uninitialized();
        let i = list.into_iter();
        for r in res.iter_mut() {
            // this could panic anytime
            std::ptr::write(r, Leaked::new(f(i.next().unwrap())))
        }
        // transmuting un-leaks the array
        std::mem::transmute::<GenericArray<Leaked<T>, N>,
                              GenericArray<T, N>>(res)
    }
}

Ich sollte beachten, dass, wenn wir entweder zur Kompilierungszeit Zugriff auf die Größe von @ hattT oder ein Typ, der seine Innereien vor dem Ausleihen verbergen kann (wieLeaked<T> im Beispiel) ist dies durchaus machbar.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage