Vydanie programovacieho jazyka Rust 1.77

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

Kúpte si spoľahlivý hosting pre stránky s DDoS ochranou, VPS VDS servery 🔥 Kúpte si spoľahlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster