Bol vydaný univerzálny programovací jazyk Rust 1.77, 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:
- Pridaná podpora literálov pre C-reťazce (c"text"), ktoré sú uložené v pamäti s nulovým znakom a sú spojené s typom "CStr". Očakáva sa, že podpora C-reťazca zjednoduší písanie kódu, ktorý interaguje s vrstvami v programovacích jazykoch, ktoré používajú reťazce ukončené nulou, a umožní vykonať potrebné kontroly vo fáze kompilácie. const AHOJ: &core::ffi::CStr = c"Ahoj svet!";
- V asynchrónne vykonávaných funkciách deklarovaných pomocou výrazu „async fn“ je povolené použitie rekurzie, t.j. takéto funkcie sa teraz môžu volať samé. async fn fib(n: u32) -> u32 { zhoda n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).wait + Box::pin(fib(n-2)).wait } }
- Makro offset_of! bolo stabilizované, čo vám umožňuje určiť bajtový posun polí štruktúr, enumerácií, zväzkov a n-tic vzhľadom na začiatok typu. V praxi môže byť makro užitočné v situáciách, keď potrebujete pracovať na úrovni posunu poľa bez prítomnosti inštancie typu. Funkčnosť offset_of je potrebná najmä pri vývoji komponentov nízkej úrovne, ako sú ovládače. použite std::mem; #[repr(C)] struct FieldStruct { prvý: u8, druhý: u16, tretí: u8 } tvrdiť_ekv!(mem::offset_of!(FieldStruct, prvý), 0); sustain_eq!(mem::offset_of!(FieldStruct, sekunda), 2); sustain_eq!(mem::offset_of!(FieldStruct, tretina), 4);
- V správcovi balíkov Cargo je v profiloch vydania štandardne povolené čistenie súborov od ladiacich údajov (strip = „debuginfo“), pokiaľ nie je v profile Cargo explicitne povolený režim ladenia, t.j. ak ladenie parametra = 0.
- Voľba "-Zthir-unsafeck=on" je štandardne povolená a poskytuje nebezpečnú kontrolu pre THIR (Typed High-Level Intermediate Representation).
- Pridaná kontrola lint pre static_mut_refs na zobrazenie varovania pri použití odkazov na meniteľné statické hodnoty.
- Bola implementovaná možnosť používať typ „Od<&[T;". N]>" pre typ "Krava<[T]>". fn foo(údaje: impl Into >) { /* … */ } fn main() { foo(&[“ahoj”, “svet”]); }
- Kompilátor poskytuje zarovnanie 16-bajtových typov i128 a u128 pre systémy x86.
- Nová časť API bola presunutá do kategórie stabilných, vrátane metód a implementácií vlastností boli stabilizované:
- pole::každý_odkaz
- pole::každý_mut
- core::net
- f32::round_ties_even
- f64::round_ties_even
- mem::offset_of!
- slice::first_chunk
- slice::first_chunk_mut
- slice::split_first_chunk
- slice::split_first_chunk_mut
- plátok::posledný_kus
- slice::last_chunk_mut
- slice::split_last_chunk
- slice::split_last_chunk_mut
- slice::chunk_by
- slice::chunk_by_mut
- Viazané::map
- Súbor::create_new
- Mutex::clear_poison
- RwLock::clear_poison
- Tretia úroveň podpory bola implementovaná pre platformy aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf a riscv32im-risc0-zkvm-elf. 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ť.
Zdroj: opennet.ru
