O Rust pode otimizar a cópia bit a bit durante a movimentação de um objeto algum dia?

Considere o trecho

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

Um típicoresultado do programa é

0x7fffc1239890
0x7fffc1229890

onde os endereços são diferentes.

Aparentemente, a grande variedadedummy foi copiado, conforme o esperado na implementação de movimentação do compilador. Infelizmente, isso pode ter um impacto não trivial no desempenho, poisdummy é uma matriz muito grande. Esse impacto pode forçar as pessoas a escolherem passar o argumento por referência, mesmo quando a função realmente "consome" o argumento conceitualmente.

Desde aFoo não derivaCopyobjetoo é movido. Como o Rust proíbe o acesso ao objeto movido, o que está impedindobar "reutilizar" o objeto originalo, forçando o compilador a gerar uma cópia bit a bit potencialmente cara? Existe uma dificuldade fundamental, ou vamos ver o compilador algum dia otimizar essa cópia em bits?

questionAnswers(1)

yourAnswerToTheQuestion