Rust 1.60 programozási nyelv kiadás

Megjelent a Mozilla projekt által alapított, de immár a Rust Foundation független non-profit szervezet égisze alatt kifejlesztett Rust 1.60 általános célú programozási nyelv. A nyelv a memória biztonságára összpontosít, és biztosítja az eszközöket a munka magas párhuzamosságának eléréséhez, miközben elkerüli a szemétgyűjtő és a futási időt (a futásidő a szabványos könyvtár alapvető inicializálására és karbantartására csökken).

A Rust memóriakezelési módszerei megóvják a fejlesztőt a mutatók manipulálása során előforduló hibáktól, és megóvják az alacsony szintű memóriakezelésből adódó problémáktól, mint például a memóriaterület elérése annak felszabadítása után, a nulla mutatók hivatkozásának megszüntetése, a puffertúllépések stb. A programkönyvtárak terjesztéséhez, a buildek biztosításához és a függőségek kezeléséhez a projekt fejleszti a Cargo csomagkezelőt. A crates.io tároló támogatja a könyvtárak tárolását.

A memóriabiztonságot a Rust a fordítási időben biztosítja a referenciaellenőrzés, az objektumok tulajdonjogának nyomon követése, az objektumok élettartamának (hatóköreinek) nyomon követésével és a memória-hozzáférés helyességének értékelésével a kód végrehajtása során. A Rust védelmet nyújt az egész számok túlcsordulása ellen is, megköveteli a változó értékek kötelező inicializálását használat előtt, jobban kezeli a hibákat a szabványos könyvtárban, alapértelmezés szerint alkalmazza a megváltoztathatatlan hivatkozások és változók koncepcióját, erős statikus gépelést kínál a logikai hibák minimalizálása érdekében.

Főbb újítások:

  • A rustc fordító egy stabilizált LLVM-alapú rendszerrel rendelkezik a lefedettség adatok generálására, amelyek a tesztelés során a kódlefedettség értékelésére szolgálnak. A lefedettségi adatok összeszerelés közbeni engedélyezéséhez használja a „-Cinstrument-coverage” jelzőt, például az összeállítást a „RUSTFLAGS=”-C instrument-coverage” cargo build” paranccsal indítva. Az így összeállított futtatható fájl futtatása után az aktuális könyvtárba kerül a default.profraw fájl, melynek feldolgozásához az llvm-tools-preview komponensből az llvm-profdata segédprogram használható. Az llvm-profdata által feldolgozott kimenet ezután átadható az llvm-cov-nak, hogy egy megjegyzésekkel ellátott kódlefedettségi jelentést hozzon létre. A forráskódra mutató hivatkozásra vonatkozó információ a vizsgált futtatható fájlból származik, amely tartalmazza a szükséges adatokat a lefedettségszámlálók és a kód közötti kapcsolatról. 1| 1|fn main() { 2| 1| println!("Helló, világ!"); 3| 1|}
  • A cargo csomagkezelőben stabilizálódott a „-timings” jelző támogatása, amely magában foglalja a részletes jelentés generálását a felépítés előrehaladásáról és az egyes lépések végrehajtási idejéről. A jelentés hasznos lehet az összeszerelési folyamat teljesítményének optimalizálásához.
  • A cargo csomagkezelő új szintaxist kínál a feltételes fordítási mechanizmushoz és az opcionális függőségek kiválasztásához, amely a Cargo.toml fájlban konfigurálható úgy, hogy felsorolja a megnevezett tulajdonságok listáját a [features] szakaszban, és aktiválható a tulajdonságok engedélyezésével a csomag felépítése során. a „--features” jelző használatával. Az új verzió támogatja a különálló névterekben lévő függőségek és a gyenge függőségek támogatását.

    Az első esetben lehetséges a „dep:” előtaggal rendelkező elemek használata a „[features]” részben, hogy explicit módon hivatkozzanak egy opcionális függőségre anélkül, hogy ezt a függőséget szolgáltatásként jelenítenék meg. A második esetben a „?” jellel való jelölés támogatása került be. ("csomagnév?/szolgáltatásnév") opcionális függőségek, amelyeket csak akkor kell szerepeltetni, ha más tulajdonság tartalmazza az adott opcionális függőséget. Például az alábbi példában a serde tulajdonság engedélyezése engedélyezi a "serde" függőséget, valamint a "serde" tulajdonságot az "rgb" függőséghez, de csak akkor, ha az "rgb" függőség máshol engedélyezve van: [dependencies] serde = { version = " 1.0.133", optional = true } rgb = { version = "0.8.25", optional = true } [szolgáltatások] serde = ["dep:serde", "rgb?/serde"]

  • A legutóbbi kiadásban letiltott növekményes fordítási támogatás visszakerült. A fordítóprogram hibája, amely a szolgáltatás letiltását okozta, megoldódott.
  • Megoldott néhány problémát az azonnali időzítők monoton időzítési garanciával történő biztosításával, amely figyelembe veszi a rendszer által alvó üzemmódban töltött időt. Korábban lehetőség szerint az OS API-t használták az időzítő működtetésére, ami nem vette figyelembe az idő egyhangúságát megtörő problémás helyzeteket, mint például a hardverproblémák, a virtualizáció használata vagy az operációs rendszer hibái.
  • Az API új része átkerült a stabil kategóriába, beleértve a tulajdonságok módszereit és megvalósításait is:
    • Arc::new_cyclic
    • Rc::új_ciklikus
    • szelet::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::tartalék_kapacitás_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • use::abs_diff
    • Megjelenítés az io::ErrorKind számára
    • Az ExitCode-hoz
    • Nem azért! (írja be, hogy "soha")
    • _Op_Hozzárendelés<$t>
    • arch::is_aarch64_feature_detected!
  • A harmadik támogatási szint a mips64-openwrt-linux-musl* és az armv7-unknown-linux-uclibceabi (softfloat) platformokon valósult meg. A harmadik szint alaptámogatást foglal magában, de automatikus tesztelés, hivatalos buildek közzététele vagy annak ellenőrzése nélkül, hogy a kód összeállítható-e.
  • A fordító át lett állítva LLVM 14 használatára.

Ezenkívül megjegyezheti:

  • Hozzáadott támogatás a rustc fordító rendszerindításához a rustc_codegen_gcc háttérrendszer használatával, amely lehetővé teszi a GCC projekt libgccjit könyvtárának használatát a rustc kódgenerátoraként, amely lehetővé teszi a rustc számára, hogy támogassa a GCC-ben elérhető architektúrákat és optimalizációkat. A fordító promóciója azt jelenti, hogy a rustc-ben egy GCC-alapú kódgenerátort használhatunk magának a rustc fordítónak az elkészítéséhez. A gyakorlati oldalon ez a funkció lehetővé teszi rozsdaprogramok készítését olyan architektúrákhoz, amelyeket korábban a rustc nem támogat.
  • Elérhető az uutils coreutils 0.0.13 eszközkészlet kiadása, amelyen belül a GNU Coreutils csomag Rust nyelvre átírt analógja fejlesztés alatt áll. A Coreutils több mint száz segédprogramot tartalmaz, beleértve a sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln és ls. A projekt célja a Coreutils egy többplatformos alternatív implementációjának létrehozása, amely képes Windows, Redox és Fuchsia platformokon futni, valamint a GPL copyleft licenc helyett a megengedő MIT licenc alatt terjeszteni.

    Az új verzió számos segédprogram továbbfejlesztett megvalósítását tartalmazza, beleértve a cp, dd, df, split és tr segédprogramok és a GNU projekt megfelelőivel való kompatibilitást. Online dokumentáció biztosított. A clap elemző a parancssori argumentumok elemzésére szolgál, ami javította a „--help” jelző kimenetét, és hozzáadta a hosszú parancsok rövidítéseinek támogatását (például megadhatja az „ls -col” értéket az „ls -color” helyett ”).

Forrás: opennet.ru

Hozzászólás