Учитывая, что в Rust (в отличие от C или C ++) адрес значения не считается существенным, в терминах language нет ничего, что предотвращало бы исключение копии.
Однако сегодня rustc ничего не оптимизирует: все оптимизации делегированы LLVM, и, похоже, вы столкнулись с ограничением оптимизатора LLVM здесь (неясно, связано ли это ограничение с LLVM, близким к семантике C или просто упущение).
Итак, есть два способа улучшения генерации кода для этого:
, но на данный момент вы можете просто захотеть избежать выделения таких больших объектов в стеке, вы можете Box
это например.