Что касается const
, то rust docs state (курсив мой):Как встроенный массив const?
Константы жить в течение всего жизненного цикла программы. Более конкретно, константы в Rust не имеют фиксированного адреса в памяти. Это потому, что они эффективно привязаны к каждому месту, что они используются. По этой причине ссылки на одну и ту же константу не обязательно гарантируют обращение к одному и тому же адресу памяти.
Итак, мне интересно, как массив констант «эффективно встроен». Смотрите мои комментарии к следующим фрагментом:
const ARR: [i32; 4] = [10, 20, 30, 40];
fn main() {
// is this
println!("{}", ARR[1]);
// the same as this?
println!("{}", [10, 20, 30, 40][1]);
// or this?
println!("{}", 20);
}
Благодарим за разъяснения!
Отличный ответ, и очень ценится. Просто повторю, что вы отвечаете - массив const встроен (заменен на месте), как и любой другой const, но ржавчина будет естественным образом оптимизировать литералы с индексированным массивом, заменив его индексированным значением? И хотя последняя оптимизация происходит, она формально не определена как часть спецификации? –
@ w.brian: Я думаю, что самая безопасная вещь - это то, что она может * оптимизировать ее. Как и большинство оптимизаций, они могут не произойти по ряду причин. Возможно, что это так просто * так тривиально *, что LLVM делает это даже при очень низких уровнях оптимизации. Но это может быть не так; насколько я знаю, это * не * гарантировано языком. –