Может ли Rust когда-нибудь оптимизировать побитовую копию во время перемещения объекта?

Рассмотрим фрагмент

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

Типичныйрезультат программы

0x7fffc1239890
0x7fffc1229890

где адреса разные.

Судя по всему, большой массивdummy был скопирован, как и ожидалось в реализации перемещения компилятора. К сожалению, это может иметь нетривиальное влияние на производительность, так какdummy это очень большой массив. Это влияние может заставить людей выбирать передачу аргумента по ссылке, даже если функция фактически «потребляет» аргумент концептуально.

посколькуFoo не выводитCopyобъектo перемещен Так как Rust запрещает доступ перемещаемого объекта, что мешаетbar «повторно использовать» исходный объектo, заставляя компилятор генерировать потенциально дорогую побитовую копию? Есть ли фундаментальная трудность, или мы увидим, что компилятор когда-нибудь оптимизирует эту побитовую копию?

Ответы на вопрос(1)

Ваш ответ на вопрос