вышла новая версия. Из интересного:
можно выставлять идентифицирующее значение для 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
Здравствуйте, sergii.p, Вы писали:
SP>
SP>можно выставлять идентифицирующее значение для enum со значениями
SP>SP>#[repr(u8)]
SP>enum Foo
SP>{
SP> A(i8), B(u8), C(bool) = 42, D
SP>}
SP>
SP>теперь Foo::C(false) в памяти будет представлена как [42, 0].
Это зачем? Для совместимости с сишковыми либами что ли?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте