09.08.2024 | Rust 1.80: следующий уровень производительности с LazyLock и LazyCell |
Новая версия популярного языка программирования 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 и расширение возможностей сопоставления с образцом - важные шаги в развитии языка. |
Проверить безопасность сайта