Bol vydaný univerzálny programovací jazyk Rust 1.60, založený projektom Mozilla, ale teraz vyvinutý pod záštitou nezávislej neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečnosť pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelnosti úloh, pričom sa vyhýba používaniu zberača odpadu a runtime (beh je zredukovaný na základnú inicializáciu a údržbu štandardnej knižnice).
Metódy spracovania pamäte Rustu chránia vývojára pred chybami pri manipulácii s ukazovateľmi a chránia pred problémami, ktoré vznikajú v dôsledku nízkoúrovňového spracovania pamäte, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov, pretečenie vyrovnávacej pamäte atď. Na distribúciu knižníc, poskytovanie zostáv a správu závislostí projekt vyvíja správcu balíkov Cargo. Úložisko crates.io je podporované pre hosťovanie knižníc.
Bezpečnosť pamäte je v Rust zabezpečená v čase kompilácie prostredníctvom kontroly referencií, sledovania vlastníctva objektu, sledovania životnosti objektov (rozsahov) a hodnotenia správnosti prístupu do pamäte počas vykonávania kódu. Rust tiež poskytuje ochranu proti pretečeniu celých čísel, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie zvláda chyby v štandardnej knižnici, štandardne aplikuje koncept nemenných referencií a premenných, ponúka silné statické typovanie na minimalizáciu logických chýb.
Hlavné inovácie:
- Kompilátor rustc má stabilizovaný systém založený na LLVM na generovanie údajov pokrytia používaných na vyhodnotenie pokrytia kódu počas testovania. Ak chcete povoliť údaje o pokrytí počas montáže, musíte použiť príznak „-Cinstrument-coverage“, napríklad spustenie zostavy príkazom „RUSTFLAGS=“-C instrument-coverage“ zostavenie nákladu. Po spustení takto zostaveného spustiteľného súboru sa do aktuálneho adresára uloží súbor default.profraw, na spracovanie ktorého môžete použiť utilitu llvm-profdata z komponentu llvm-tools-preview. Výstup spracovaný pomocou llvm-profdata možno potom odovzdať do llvm-cov, aby sa vygenerovala správa o pokrytí kódu s anotáciou. Informácie o prepojení na zdrojový kód sa získavajú zo skúmaného spustiteľného súboru, ktorý obsahuje potrebné údaje o prepojení medzi počítadlami pokrytia a kódom. 1| 1|fn main() { 2| 1| println!("Ahoj, svet!"); 3| 1|}
- V správcovi nákladných balíkov bola stabilizovaná podpora pre príznak „-timings“, ktorý zahŕňa generovanie podrobnej správy o priebehu zostavovania a čase vykonania každého kroku. Správa môže byť užitočná na optimalizáciu výkonu procesu montáže.
- Správca balíkov nákladu ponúka novú syntax pre mechanizmus podmienenej kompilácie a výberu voliteľných závislostí, nakonfigurovaný v súbore Cargo.toml vypísaním zoznamu pomenovaných vlastností v sekcii [features] a aktivovaný povolením vlastností počas zostavovania balíka. pomocou príznaku „--features“. Nová verzia pridáva podporu pre závislosti v samostatných menných priestoroch a slabé závislosti.
V prvom prípade je možné použiť prvky s predponou „dep:“ v sekcii „[features]“ na explicitné prepojenie na voliteľnú závislosť bez toho, aby bola táto závislosť implicitne reprezentovaná ako vlastnosť. V druhom prípade pribudla podpora označovania znakom “?”. ("package-name?/feature-name") voliteľné závislosti, ktoré by mali byť zahrnuté iba vtedy, ak nejaká iná vlastnosť obsahuje danú voliteľnú závislosť. Napríklad v nižšie uvedenom príklade povolenie vlastnosti serde povolí závislosť „serde“, ako aj vlastnosť „serde“ pre závislosť „rgb“, ale iba ak je závislosť „rgb“ povolená inde: [závislosti] serde = { verzia = " 1.0.133", voliteľné = pravda } rgb = { verzia = "0.8.25", nepovinné = pravda } [funkcie] serde = ["dep:serde", "rgb?/serde"]
- Podpora pre prírastkovú kompiláciu, ktorá bola v poslednom vydaní zakázaná, bola vrátená. Chyba kompilátora, ktorá spôsobila zakázanie funkcie, bola vyriešená.
- Vyriešené niektoré problémy s poskytovaním okamžitých časovačov so zárukou monotónneho časovania, ktoré zohľadňuje čas strávený systémom v režime spánku. Predtým sa na obsluhu časovača vždy, keď to bolo možné, využívalo OS API, ktoré nezohľadňovalo problematické situácie, ktoré narúšajú monotónnosť času, ako napríklad problémy s hardvérom, používanie virtualizácie alebo chyby v operačnom systéme.
- Nová časť API bola presunutá do kategórie stabilných, vrátane metód a implementácií vlastností boli stabilizované:
- Arc::new_cyclic
- Rc::new_cyclic
- plátok::EscapeAscii
- <[u8]>::escape_ascii
- u8::escape_ascii
- Vec::spare_capacity_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
- useize::abs_diff
- Displej pre io::ErrorKind
- Od pre výstupný kód
- Nie pre ! (napíšte "nikdy")
- _Op_Assign<$t>
- arch::is_aarch64_feature_detected!
- Tretia úroveň podpory bola implementovaná pre platformy mips64-openwrt-linux-musl* a armv7-unknown-linux-uclibceabi (softfloat). Tretia úroveň zahŕňa základnú podporu, ale bez automatického testovania, zverejňovania oficiálnych verzií alebo kontroly, či je možné kód zostaviť.
- Kompilátor bol prepnutý na používanie LLVM 14.
Okrem toho si môžete všimnúť:
- Pridaná podpora pre bootstrapping kompilátora rustc pomocou backendu rustc_codegen_gcc, ktorý vám umožňuje použiť knižnicu libgccjit z projektu GCC ako generátor kódu v rustc, čo umožňuje rustc poskytovať podporu pre architektúry a optimalizácie dostupné v GCC. Propagácia kompilátora znamená možnosť použiť generátor kódu založený na GCC v rustc na zostavenie samotného kompilátora rustc. Z praktickej stránky vám táto funkcia umožňuje vytvárať programy rust pre architektúry, ktoré predtým neboli podporované v rustc.
- K dispozícii je vydanie sady nástrojov uutils coreutils 0.0.13, v rámci ktorej sa vyvíja analógia balíka GNU Coreutils, prepísaná do jazyka Rust. Coreutils prichádza s viac ako stovkou nástrojov vrátane sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln a ls. Cieľom projektu je vytvoriť multiplatformovú alternatívnu implementáciu Coreutils, schopnú bežať na platformách Windows, Redox a Fuchsia, ako aj distribúciu pod permisívnou licenciou MIT namiesto licencie GPL copyleft.
Nová verzia zlepšila implementáciu mnohých nástrojov, vrátane výrazne zlepšenej kompatibility nástrojov cp, dd, df, split a tr s ich náprotivkami z projektu GNU. Poskytnutá online dokumentácia. Analyzátor clap sa používa na analýzu argumentov príkazového riadka, čo zlepšilo výstup pre príznak „--help“ a pridalo podporu pre skratky dlhých príkazov (napríklad môžete zadať „ls -col“ namiesto „ls -color “).
Zdroj: opennet.ru