вышла новая версия. Из интересного:
можно выставлять идентифицирующее значение для enum со значениями
#[repr(u8)]
enum Foo
{
A(i8), B(u8), C(bool) = 42, D
}
теперь Foo::C(false) в памяти будет представлена как [42, 0].
Можно подсказать компилятору не оптимизировать результат выполнения какой-то операции. В основном надо для профилирования
fn push_cap(v: &mut Vec<i32>) {
for i in 0..4 {
v.push(i);
black_box(v.as_ptr());
}
}
pub fn bench_push() -> Duration {
let mut v = Vec::with_capacity(4);
let now = Instant::now();
push_cap(&mut v);
now.elapsed()
}
здесь если не указать black_box, компилятор практически полностью выкинет код push_cap и замер будет нерелевантен.
Такой себе аналог volatile.
появилась возможность выкидывать пакеты (cargo add была добавлена ранее в 1.62)
добавлена поддержка диапазонов в match
let v= 42;
let i = match v{
..=45 => true,
45.. => false
}
ранее приходилось несколько извращаться
let v= 42;
let i = match v{
0..=45 => true,
_ => false
}
почитать на английском
https://blog.rust-lang.org/2022/12/15/Rust-1.66.0.html