¿Puede Rust optimizar la copia en bits durante el movimiento de un objeto algún día?

Considera el fragmento

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);
}

Un típicoresultado del programa es

0x7fffc1239890
0x7fffc1229890

donde las direcciones son diferentes

Aparentemente, la gran variedaddummy ha sido copiado, como se esperaba en la implementación del movimiento del compilador. Desafortunadamente, esto puede tener un impacto no trivial en el rendimiento, ya quedummy Es una gran variedad. Este impacto puede obligar a las personas a elegir pasar el argumento por referencia, incluso cuando la función realmente "consume" el argumento conceptualmente.

Ya queFoo no derivaCopyobjetoo es movido Dado que Rust prohíbe el acceso de objetos movidos, lo que impidebar para "reutilizar" el objeto originalo, obligando al compilador a generar una copia bit-sabia potencialmente costosa? ¿Hay alguna dificultad fundamental, o veremos que el compilador algún día optimice esta copia inteligente?

Respuestas a la pregunta(1)

Su respuesta a la pregunta