Vydanie programovacieho jazyka Rust 1.60

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

Pridať komentár