Разработчики опубликовали релиз языка программирования Rust 1.80. Он включает структуры LazyCell и LazyLock, которые позволяют отложить инициализацию данных до первого доступа, а вторая поддерживает средства синхронизации для использования в многопоточном коде.
use std::sync::LazyLock; use std::time::Instant; static LAZY_TIME: LazyLock<Instant> = LazyLock::new(Instant::now); fn main() { let start = Instant::now(); std::thread::scope(|s| { s.spawn(|| { println!("Thread lazy time is {:?}", LAZY_TIME.duration_since(start)); }); println!("Main lazy time is {:?}", LAZY_TIME.duration_since(start)); }); }
В компиляторе rustc стабилизирована опция «—check-cfg». Она задействована в пакетном менеджере для проверки всех имён и значений, задаваемых через cfg, включая имена из Cargo.toml, а также новый вывод cargo::rustc-check-cfg из скриптов сборки. Опция позволяет обнаружить опечатки или другие ошибки конфигурации.
fn main() { println!("Hello, world!"); #[cfg(feature = "crayon")] rayon::join( || println!("Hello, Thing One!"), || println!("Hello, Thing Two!"), ); }
warning: unexpected `cfg` condition value: `crayon` --> src/main.rs:4:11 | 4 | #[cfg(feature = "crayon")] | ^^^^^^^^^^-------- | | | help: there is a expected value with a similar name: `"rayon"` | = note: expected values for `feature` are: `rayon` = help: consider adding `crayon` as a feature in `Cargo.toml` = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration = note: `#[warn(unexpected_cfgs)]` on by default
В шаблонах теперь можно указывать диапазоны в форматах «a..b» и «..b» по аналогии с использованием выражений Range и RangeTo.
pub fn size_prefix(n: u32) -> &'static str { 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", } }
Признак «const», который определяет возможность использования в любом контексте вместо констант, применили в функциях:
-
<[T]>::last_chunk,
-
BinaryHeap::new.
Кроме того, в разряд стабильных перевели несколько десятков API, в том числе методы и реализации типажей.
Наконец, реализован третий уровень поддержки для платформы x86_64-unknown-linux-none. Он подразумевает базовую поддержку без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
В июне вышла версия Rust 1.79 с поддержкой inline-констант, возможностью импорта функции main из других модулей и crate-пакетов и вторым уровнем поддержки для платформы x86_64-unknown-linux-none.
ссылка на оригинал статьи https://habr.com/ru/articles/831862/
Добавить комментарий