Как стать автором
Обновить

Вышел Rust 1.80

Время на прочтение2 мин
Количество просмотров2.4K

Разработчики опубликовали релиз языка программирования 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.

Теги:
Хабы:
Всего голосов 9: ↑9 и ↓0+14
Комментарии5

Другие новости

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн