Rust 1.34 programozási nyelv kiadás

került sor rendszer programozási nyelv kiadása Rozsda 1.34, amelyet a Mozilla projekt fejlesztett ki. 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:

  • 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ő nyilvántartások hozzáadása a .cargo/config fájlhoz (a $HOME vagy a csomagkönyvtárban található)
    biztosítani „[nyilvántartások]” szakaszban, és külső nyilvántartás használatához a „nyilvántartás” opció megjelent a Cargo.toml egyes függőségek leírásá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. tesztekben doktestek, lehetővé téve a dokumentáció példakódjának 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 biztosított tetszőleges tokenkészletek használatának képessége („#[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)]”;
  • Stabilizált típusok (tulajdonság) TryFrom и TryInto, amely lehetővé teszi 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 hibatípus került hozzáadásra Csalhatatlan, átlátható használatot tesz lehetővé
    TryFrom a "From" összes meglévő megvalósításához;

  • A funkció elavult CommandExt::before_exec, amely lehetővé tette egy kezelő végrehajtását az exec futtatása előtt, amely a fork() hívás után elágazó gyermekfolyamat keretében került végrehajtásra. 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 meghatározatlan viselkedéshez és a könyvtárak helytelen működéséhez vezethet.
    Javasoljuk, hogy a before_exec helyett egy nem biztonságos függvényt használjon CommandExt::pre_exec.

  • Stabilizált előjeles és előjel nélküli atomi egész számok 8 és 64 bit közötti méretben (például AtomicU8), valamint az aláírt típusok NonZeroI[8|16|32|64|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” összeállítási opció megadásával hozzáadtuk az optimalizálás engedélyezésének lehetőségét a linkelési szakaszban.

Forrás: opennet.ru

Hozzászólás