Rust 1.34 programozási nyelv kiadás

Megjelent a Mozilla projekt által fejlesztett Rust 1.34 rendszerprogramozási nyelv. 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. A programkönyvtárak terjesztésére, az összeállítás biztosítására és a függőségek kezelésére fejleszti a projekt a Cargo csomagkezelőt, amely lehetővé teszi a programhoz szükséges könyvtárak egy kattintással történő beszerzését. A crates.io tároló támogatja a könyvtárak tárolását.

Főbb újítások:

  • A Cargo csomagkezelő olyan eszközöket adott hozzá, amelyek az alternatív csomag-nyilvántartásokkal működhetnek együtt, amelyek együtt létezhetnek a crates.io nyilvános nyilvántartással. Például a szabadalmaztatott alkalmazások fejlesztői mostantól használhatják saját privát nyilvántartásukat, amelyet a Cargo.toml függőségek listázásakor használhatnak, és a crates.io-hoz hasonló verziószámítási modellt alkalmazhatnak termékeikre, valamint hivatkozhatnak függőségekre mindkét ládára. io és a saját nyilvántartásába.

    Külső rendszerleíró adatbázis hozzáadása a ~/.cargo/config fájlhoz
    A „[nyilvántartások]” szakaszban egy új „my-registry” opció található, és egy „egyéb-láda” opció is hozzáadásra került, amely megemlíti a külső nyilvántartást a Cargo.toml „[függőségek]” szakaszában. Egy további rendszerleíró adatbázishoz való csatlakozáshoz egyszerűen helyezze el a hitelesítési tokent a ~/.cargo/credentials fájlba, és futtassa a parancsot
    "cargo login --registry=my-registry" és egy csomag közzétételéhez -
    "cargo publish -registry=my-registry";

  • Teljes támogatás hozzáadva a „?” operátor használatához. doctestekben, amelyek lehetővé teszik a dokumentációból származó példakódok tesztként történő használatát. Korábban operátor
    "?" csak az „fn main()” függvény vagy a „#[teszt]” függvények esetén használható a tesztvégrehajtás során fellépő hibák kezelésére;

  • Az eljárási makrók segítségével meghatározott egyéni attribútumokban tetszőleges tokenkészletek használhatók („#[attr($tokens)]”, „#[attr[$tokens]] és #[attr{$tokens}]”). Korábban az elemeket csak fa/rekurzív formában lehetett megadni karakterlánc-literálokkal, például „#[foo(bar, baz(quux, foo = „bar”)]”, de most már lehetőség van felsorolások használatára (' #[tartomány(0. .10)]') és olyan konstrukciók, mint a „#[bound(T: MyTrait)]”;
  • A TryFrom és TryInto tulajdonságokat stabilizálták, lehetővé téve a típuskonverziókat hibakezeléssel. Például a from_be_bytes integer típusú metódusok tömböket használnak bemenetként, de az adatok gyakran Slice típusúak, és a tömbök és a szeletek közötti konvertálást manuálisan nehéz végrehajtani. Az új tulajdonságok segítségével a megadott művelet menet közben is végrehajtható a .try_into() meghívásával, például „let num = u32::from_be_bytes(slice.try_into()?)”. A mindig sikeres konverziókhoz (például u8-ról u32-re) egy tévedhetetlen hibatípus került hozzáadásra, hogy lehetővé tegye a
    TryFrom a "From" összes meglévő megvalósításához;

  • Elavult a CommandExt::before_exec függvény, amely lehetővé tette egy kezelő végrehajtását az exec előtt, amelyet a fork() hívás után elágazó gyermekfolyamat keretében hajtottak végre. Ilyen körülmények között a szülőfolyamat egyes erőforrásai, például a fájlleírók és a leképezett memóriaterületek megkettőzhetők, ami definiálatlan viselkedéshez és a könyvtárak helytelen működéséhez vezethet.
    A before_exec helyett javasolt a nem biztonságos CommandExt::pre_exec függvény használata.

  • Stabilizált előjeles és előjel nélküli atomi egész számok 8-64 bites méretben (például AtomicU8), valamint előjeles NonZeroI[8|16|32|54|128].
  • Az API új része átkerült a stabil kategóriába, beleértve a Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] és a SystemTime metódusok stabilizálva lettek ::checked_[add|sub]. Az iter::from_fn és az iter::uccessors függvények stabilizálva lettek;
  • Minden egész típus esetében a checked_pow, a saturating_pow, a wrapping_pow és az overflowing_pow metódusok implementálva vannak;
  • A „-C linker-plugin-lto” build opció megadásával hozzáadtuk az optimalizálás lehetőségét az összekapcsolási szakaszban (a rustc a Rust kódot LLVM bitkódba fordítja, ami lehetővé teszi az LTO optimalizálás alkalmazását).

Forrás: opennet.ru

Hozzászólás