Shpallja e gjuhës së programimit Rust 1.42

Publikuar lëshimi i gjuhës së programimit sistemor Rust 1.42, e bazuar në projektin Mozilla. Gjuha fokusohet në sigurinë e menaxhimit të memories, siguron menaxhim automatik të memories dhe ofron mjete për arritjen e një paralelizmi të lartë në ekzekutimin e detyrave, duke u shmangur kështu përdorimit të mbledhësve të plehrave dhe runtime.

Menaxhimi automatik i memories në Rust përmban zhvilluesit nga manipulimi i treguesve dhe mbron ata nga problemet që lindin për shkak të punës me nivel të ulët me memorien, siç janë qasjet në hapësirën e memories pas lirimit të saj, dereferencimi i treguesve nul, dalja jashtë kufijve të tamponit etj. Për shpërndarjen e biblioteka, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti po zhvillohet menaxher për paketat Cargo, që lejon shfrytëzimin e bibliotekave të nevojshme për programin me një klik. Për vendosjen e bibliotekave, mbështetet repository crates.io.

Ndryshimet kryesore risitë:

  • Shtuar mbështetje për modele për përputhjen e pjesëve të prerjeve (masave dinamike, slice). Nëse më parë lejohej përputhje e saktë, tani është shtuar mundësia e përdorimit të konstruksioneve me etiketën «..» për të përfshirë elementët e mbetur të masës. Për shembull:

    fn foo(words: &[&str]) {
    match words {

    // проверяет начальные элементы массива с игнорированием
    elementëve pas tyre
    [«Hello», «World», «!», ..] => println!(«Hello World!»),

    // проверяет первые два элемента «Foo» и «Bar», а остальное не важно
    [«Foo», «Bar», ..] => println!(«Baz»),

    // игнорируем всё, но последний элемент должен быть «!».
    [.., «!»] => println!(«!!!»),

    // в срез start включаем всё, кроме последнего элемента, который должен быть «z»
    [start @ .., «z»] => println!(«fillon me: {:?}», start),

    // в срез end помещаем всё, кроме первого элемента, который должен быть «a».
    [«a», end @ ..] => println!(«mbyllet me: {:?}», end),

    rest => println!(«{:?}», rest),
    }
    }

  • I është shtuar një makros i ri «matches!», i cili merr një shprehje dhe një model si hyrje, dhe kthen «true», nëse modeli përputhet me shprehjen. Në model është e mundur të përdoren operacione «|» dhe «if».

    match self.partial_cmp(other) {
    Some(Less) => true,
    _ => false,
    }

    matches!(self.partial_cmp(other), Some(Less))

    let foo = ‘f’;
    assert!(matches!(foo, ‘A’..=’Z’ | ‘a’..=’z’));

    let bar = Some(4);
    assert!(matches!(bar, Some(x) if x > 2));

  • Në mesazhet panic, të cilat shfaqen kur përdoren në mënyrë të pasaktë
    tipet Option dhe Result tani pasqyrojnë numrat e rreshtave me lidhje në kodin që ka bërë thirrjen problematike, në vend të lidhjeve me kodin e realizimit të thirrjes në libcore. Për shembull, ndryshimi preket thirrjen unwrap dhe expect mbi Option::None ose dështimet gjatë përdorimit të unwrap_err, expect, expect_err dhe metodave të ngjashme për tipin Result.
  • Në menaxherin e paketave Cargo është siguruar zëvendësimi automatik i «proc_macro crate» në bllokun «extern» për paketat me makros procedurale. Kjo ndryshim lejon përdorimin e direktivës «use» për makros procedurale pa pasur nevojë të specificohet në kod «extern crate proc_macro;». Për shembull, nëse programi përdor linjën «use proc_macro::TokenStream;», kodi tani do të vazhdojë të funksionojë edhe nëse hiqet «extern crate proc_macro;».
  • Janë zgjeruar funksionalitetet e bibliotekës standarde. Në iter::Empty shtuar mbështetje Send dhe Sync për çdo vlerë T.
    Thirrjet Pin::{map_unchecked, map_unchecked_mut} janë hequr nevojën për të kthyer një vlerë të tipit për implementimin e «Sized».
    Në io::Cursor janë realizuar PartialEq dhe Eq. Karakteri «const», që përcakton mundësinë e përdorimit në çdo kontekst në vend të konstantave, aplikuar për metodën Layout::new.
  • Një sasi e re API është kaluar në kategorinë e qëndrueshme, përfshirë stabilizimin e CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    ManuallyDrop::take,
    ptr::slice_from_raw_parts_mut dhe ptr::slice_from_raw_parts.
  • Metoda Error::description është shpallur e vjetruar.
  • Përfshirë një nivel të dytë mbështetjeje për platformat armv7a-none-eabi dhe riscv64gc-unknown-linux-gnu. Mbështetje e bibliotekës standarde është siguruar për platformën riscv64gc-unknown-linux-gnu.
    platformat 32-bit të Apple janë ulur në nivelin e tretë të mbështetjes, i cili ofron mbështetje bazike, përveç testeve automatike dhe publikimit të ndërtimeve zyrtare. Ulja e nivelit të mbështetjes është shkaktuar nga ndalimi i mbështetjes nga Apple për platformat 32-bit.

Burimi: opennet.ru

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster