Элементы кортежа могут иметь побочные эффекты, и некоторые из них могут зависеть от других.Рассмотрим эту программу:
fn main() {
let mut v = vec![1, 2];
match (v.pop(), v.pop()) {
(Some(z), Some(y)) => println!("y = {}, z = {}", y, z),
_ => unreachable!(),
}
}
Она выводит y = 1, z = 2
или y = 2, z = 1
?В нескольких раундах на Rust Playground предлагается первый вариант на стабильной версии 1.32.0, но, возможно, он изменится, если я буду запускать его несколько раз, перекомпилировать компилятор, менять версии компилятора и т. Д.
Имеется ли документально подтвержденное обязательство или, по крайней мере, намерение поддерживать определенный порядок оценки для кортежей (например, по глубине сначала и слева направо)?