Rust 1.39 programozási nyelv kiadás

közzétett rendszer programozási nyelv kiadása Rozsda 1.39, amelyet a Mozilla projekt alapított. A nyelv a memória biztonságára összpontosít, automatikus memóriakezelést biztosít, és lehetőséget biztosít a magas szintű párhuzamosság elérésére szemétgyűjtő vagy futási idő nélkül.

A Rust automatikus memóriakezelése megszabadítja a fejlesztőt a mutatómanipulációtól, és megvédi az alacsony szintű memóriakezelésből eredő problémákat, mint például az utólagos memóriaelérések, a nulla mutatóhivatkozások, a puffertúllépések és hasonlók. Csomagkezelő fejlesztés alatt áll a könyvtárak terjesztésére, az összeállítás biztosítására és a függőségek projekt általi kezelésére. Szállítmány, amely lehetővé teszi, hogy egy kattintással megszerezze a programhoz szükséges könyvtárakat. Egy tárhely támogatott a könyvtárak fogadására ládák.io.

A főbb innovációk:

  • Stabilizált az "async" függvényen, az async move { ... } blokkon és a ".await" operátoron alapuló új aszinkron programozási szintaxis, amely megkönnyíti a fő parancsfolyamot nem blokkoló kezelők írását. Az aszinkron I/O-hoz korábban kínált API-hoz képest az async/.await konstrukciók egyszerűen érthetők, jól olvashatóak, és lehetővé teszik összetett aszinkron interakciók megvalósítását ismert folyamvezérlési technikák segítségével, amelyek hurkon, feltételes utasításokon és kivételeken alapulnak.

    Az Async-await szintaxis lehetővé teszi olyan függvények létrehozását, amelyek szüneteltethetik a végrehajtásukat, visszaadhatják a vezérlést a főszálhoz, majd onnan folytathatják a végrehajtást, ahol abbahagyták. Ilyen szünet szükséges például az I/O feldolgozása során, amikor a következő adat megérkezésére várva más munkát is el lehet végezni. Az „async fn” és „async move” paraméterekkel meghatározott függvények és blokkok egy tulajdonságot adnak vissza Jövő, amely egy késleltetett aszinkron számítási reprezentációt határoz meg. Közvetlenül kezdeményezhet egy halasztott számítást, és megkaphatja az eredményt a „.await” operátor használatával. Semmilyen műveletet nem hajtanak végre vagy terveznek előre, amíg meg nem hívják a .await parancsot, ami lehetővé teszi összetett beágyazott konstrukciók létrehozását további többletterhelés nélkül.

    async fn first_function() -> u32 { .. }
    ...
    legyen jövő = first_function();
    ...
    legyen eredmény: u32 = future.await;

  • Stabilizált "#![feature(bind_by_move_pattern_guards)]", amely lehetővé teszi a "kötési típusú" változók használatátmozdulattal" a sablonokban, és használjon hivatkozásokat ezekre a változókra a kifejezés "if" szakaszábanmérkőzés". Például a következő konstrukciók engedélyezettek:

    fn main() {
    let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    match array {
    számok
    ha számok.iter().sum::() == 10

    => {
    csepp(számok);
    }
    _ => elérhetetlen!(),
    }
    }

  • A jelzés megengedett attribútumokat függvényparaméterek, lezárások és funkciómutatók meghatározásakor. A feltételes fordítási attribútumok (cfg, cfg_attr), amelyek lint segítségével vezérlik a diagnosztikát (allow, warn, deny és forbid), valamint a kiegészítő makróhívási attribútumok támogatottak.

    fn len(
    #[cfg(windows)] szelet: &[u16], // használja a paramétert Windows rendszeren
    #[cfg(not(windows))] szelet: &[u8], // használja más operációs rendszerben
    ) -> használ {
    slice.len()
    }

  • Figyelmeztetések a változók kölcsönzésének (kölcsönzés-ellenőrző) NLL (Non-Lexical Lifetimes) technikával történő ellenőrzése során azonosított problémákra, lefordított a végzetes hibák kategóriájába. Emlékezzünk vissza, hogy a kölcsönzött változók élettartamát figyelembe vevő új mechanizmuson alapuló ellenőrző rendszer lehetővé tette néhány olyan probléma azonosítását, amelyeket a régi ellenőrző kód nem vett észre. Mivel az ilyen ellenőrzések hibakimenete befolyásolhatja a korábban működő kóddal való kompatibilitást, kezdetben figyelmeztetéseket adtak ki hibák helyett. A figyelmeztetéseket a Rust 2018 módban történő futtatás során megjelenő hibák váltották fel. A következő kiadásban a hibakimenetet is Rust 2015 módban implementálják, ami végre megszabadul a régi kölcsönellenőrzőtől;
  • A „const” attribútum, amely meghatározza a konstansok helyett tetszőleges kontextusban való használat lehetőségét, a Vec::new, String::new, LinkedList::new, str::len, [T]::len függvényekhez használatos. , str::as_bytes,
    abs, wrapping_abs és overflowing_abs;

  • Az API-k új része átkerült a stabil kategóriába, beleértve a stabilizált módszereket is
    Pin::inner_inner, Instant::checked_duration_sce and Instant::saturating_duration_sce;

  • A cargo csomagkezelő mostantól képes a „.toml” kiterjesztést használni a konfigurációs fájlokhoz. Előzetes támogatás hozzáadva a szabványos könyvtár közvetlen Cargo-ból történő felépítéséhez. A "--workspace" jelző hozzáadva a vitatott "--all" jelző helyett. Egy új mező került hozzáadásra a metaadatokhoz "közzétesz“, amely lehetővé teszi a függőségek közzétételét egy git címke és verziószám megadásával. A „-Ztimings” tesztopció hozzáadva HTML-jelentés létrehozásához a különböző fordítási szakaszok végrehajtási idejéről.
  • A rustc fordítóban a diagnosztikai üzenetek közé tartozik a terminálba nem illeszkedő kód végeinek levágása. Harmadik szintű támogatást biztosít a célplatformokhoz
    i686-unknown-uefi és sparc64-unknown-openbsd. A harmadik szint alapvető támogatást foglal magában, de automatikus tesztelés és a hivatalos buildek közzététele nélkül.

Forrás: opennet.ru

Hozzászólás