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