Rust 1.42 programozási nyelv kiadás

közzétett rendszer programozási nyelv kiadása Rozsda 1.42a Mozilla projekt alapította. A nyelv a biztonságos memóriakezelésre összpontosít, automatikus memóriakezelést biztosít, és biztosítja a magas párhuzamos munkavégzés elérését, miközben elkerüli a szemétgyűjtő és futásidejű.

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:

  • Hozzáadva a szeletek részeinek (dinamikus tömbök, szelet) illeszkedésére szolgáló sablonok támogatása. Korábban megengedett volt a pontos egyezés, de most már lehetőség van a ".." jelű konstrukciók használatára a tömb többi elemének lefedésére. Például:

    fn foo(szavak: &[&str]) {
    megfelelő szavak {

    // ellenőrzi a tömb kezdő elemeit és figyelmen kívül hagyja
    azokat követő elemek
    ["Hello", "World", "!", ..] => println!("Hello World!"),

    // ellenőrzi az első két "Foo" és "Bar" elemet, a többi pedig nem fontos
    ["Foo", "Bar", ..] => println!("Baz"),

    // mindent figyelmen kívül hagy, de az utolsó elemnek "!"-nek kell lennie.
    [.., “!”] => println!(“!!!”),

    // a kezdő szeletbe mindent beleírunk, kivéve az utolsó elemet, aminek „z”-nek kell lennie
    [start @ .., "z"] => println!("a következővel kezdődik: {:?}", start),

    // az utolsó szeletbe mindent belerakunk, kivéve az első elemet, ami „a” legyen.
    ["a", vége @ ..] => println!("vége: {:?}", vége),

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

  • Hozzáadott egy új „egyezik!” makrót, amely egy kifejezést és egy mintát vesz be bemenetként, és az „igaz” értéket adja vissza, ha a minta egyezik a kifejezéssel. A sablon használhat „|” műveleteket és ha".

    match self.partial_cmp(other) {
    Néhány (kevesebb) => igaz,
    _ => hamis,
    }

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

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

    let bar = Néhány(4);
    assert!(egyezik!(bar, Some(x) if x > 2));

  • Pánik üzenetek, ha nem megfelelően használják
    Option és Result típusúak, most a sorszámokat jelenítik meg a problémás hívást kezdeményező kódra mutató hivatkozásokkal, nem pedig a libcore-ban a hívást megvalósító kódra mutató hivatkozásokkal. A változás például hatással van az Option::None feletti kibontásra és várakozásra, vagy összeomlik az unwrap_err, expect, expect_err és hasonló módszerek használatakor az Eredmény típusnál.

  • A Cargo csomagkezelő biztosítja a „proc_macro crate” automatikus helyettesítését az „extern” blokkba az eljárási makrókat tartalmazó csomagok esetében. Ez a változtatás lehetővé teszi a "use" direktíva eljárási makrókra történő alkalmazását anélkül, hogy a kódban meg kellene adni az "extern crate proc_macro;" kifejezést. Például, ha a program a „use proc_macro::TokenStream;” sort használja, akkor a kód továbbra is működni fog, ha az „extern crate proc_macro;” kikerül belőle.
  • A szabványos könyvtár képességei kibővültek. In iter::Empty tette hozzá Küldés és szinkronizálás támogatás bármely T értékhez.
    Calls Pin::{map_unchecked, map_unchecked_mut} szállított attól, hogy típusértéket kelljen visszaadnia a "Sized" megvalósításhoz.
    In io::Kurzor megvalósítani PartialEq és Eq. A „const” attribútum meghatározza a konstansok helyett bármilyen kontextusban való használat lehetőségét, alkalmazott a Layout::new metódushoz.

  • Az API új része átkerült a stabil kategóriába, beleértve a stabilizált CondVar::wait_while, CondVar::wait_timeout_while,
    DebugMap::key, DebugMap::value,
    ManuallyDrop::take,
    ptr::slice_from_raw_parts_mut és ptr::slice_from_raw_parts.

  • Az Error::description metódus elavult.
  • Második szintű támogatást nyújtott az armv7a-none-eabi és riscv64gc-unknown-linux-gnu platformokhoz. A riscv64gc-unknown-linux-gnu platform szabványos könyvtárának támogatása biztosított.
    Apple 32 bites platformok lefokozták a harmadik támogatási szintig, ami alaptámogatást jelent, de automatikus tesztelés és a hivatalos buildek közzététele nélkül. A támogatás leminősítése annak köszönhető, hogy az Apple már nem támogatja a 32 bites platformokat.

Forrás: opennet.ru

Hozzászólás