Новая версия популярного языка ускоряет и совершенствует код.
Новая версия популярного языка программирования Rust - 1.80 вносит ряд важных нововведений, которые должны упростить и оптимизировать разработку приложений.
Одним из главных новшеств стала стабилизация двух новых типов данных: LazyLock и LazyCell. Эти типы позволяют откладывать инициализацию переменных до момента их первого использования, вследствие чего повышается производительность программ. Вот пример применения LazyLock для ленивой инициализации:
use std::sync::LazyLock;
static G_INT: LazyLock<u8> = LazyLock::new(|| 100);
fn main() {
let x = *G_INT; // инициализация произойдет здесь
// ...
}
В отличие от OnceLock, который также может использоваться для ленивой инициализации, LazyLock требует меньше кода и более практичен в применении:
use std::sync::OnceLock;
static G_INT: OnceLock<u8> = OnceLock::new();
fn main() {
let x = *G_INT.get_or_init(|| 100);
// ...
}
Помимо LazyLock и LazyCell, в арсенале Rust есть и другие типы для управления инициализацией: OnceLock и OnceCell. Они обеспечивают однократную инициализацию данных и могут быть полезны в более сложных сценариях.
Кроме того, Rust 1.80 добавляет поддержку эксклюзивных диапазонов в конструкциях сопоставления с образцом. Теперь программисты могут использовать не только a..=b (включительно), но и a..b (исключительно):
const K: u32 = 10u32.pow(3);
const M: u32 = 10u32.pow(6);
const G: u32 = 10u32.pow(9);
match n {
..K => "",
K..M => "k",
M..G => "M",
G.. => "G",
}
Для предотвращения ошибок при переходе на эксклюзивные диапазоны Rust 1.80 вводит два новых предупреждения компилятора: non_contiguous_range_endpoints и overlapping_range_endpoints.
Еще одно интересное нововведение - поддержка вариативных функций без именованного параметра. Это сближает Rust с грядущим стандартом C23, который предусматривает такой же синтаксис.
В целом, обновление Rust 1.80 предлагает разработчикам ряд полезных инструментов для повышения производительности и выразительности кода. Стабилизация LazyLock, LazyCell и расширение возможностей сопоставления с образцом - важные шаги в развитии языка.
Наш канал — питательная среда для вашего интеллекта