Kann Rust eines Tages die bitweise Kopie während des Verschiebens eines Objekts optimieren?

Betrachten Sie das Snippet

struct Foo {
    dummy: [u8; 65536],
}

fn bar(foo: Foo) {
    println!("{:p}", &foo)
}

fn main() {
    let o = Foo { dummy: [42u8; 65536] };
    println!("{:p}", &o);
    bar(o);
}

in typischesErgebni des Programms ist

0x7fffc1239890
0x7fffc1229890

wo die Adressen unterschiedlich sind.

Anscheinend das große Arraydummy wurde wie erwartet in die move-Implementierung des Compilers kopiert. Leider kann dies nicht unbedeutende Auswirkungen auf die Leistung haben, dadummy ist ein sehr großes Array. Diese Auswirkung kann dazu führen, dass Personen stattdessen die Übergabe von Argumenten als Referenz wählen, selbst wenn die Funktion das Argument tatsächlich konzeptionell "verbraucht".

Schon seitFoo leitet nicht abCopy, Objekto ist verschoben. Da Rust den Zugang von bewegten Objekten verbietet, was verhindertbar um das ursprüngliche Objekt "wiederzuverwenden"o, um den Compiler zu zwingen, eine potenziell teure bitweise Kopie zu erstellen? Gibt es eine grundlegende Schwierigkeit, oder wird der Compiler eines Tages diese bitweise Kopie optimieren?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage