Bol vydaný univerzálny programovací jazyk Rust 1.61, 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:
- Z hlavnej funkcie je možné definovať vlastné návratové kódy. Pôvodne mohla Rustova hlavná funkcia vrátiť iba typ „()“ (jednotka), ktorý vždy označoval stav úspešného ukončenia, pokiaľ vývojár výslovne nezavolal funkciu „process::exit(code)“. V Rust 1.26 pomocou nestabilnej vlastnosti Termination v hlavnej funkcii bolo možné vrátiť hodnoty „Ok“ a „Err“, zodpovedajúce kódom EXIT_SUCCESS a EXIT_FAILURE v programoch C. V Rust 1.61 bola vlastnosť Termination stabilná a bol navrhnutý samostatný typ ExitCode, ktorý predstavuje špecifický návratový kód, ktorý abstrahuje typy návratov špecifické pre platformu tým, že poskytuje preddefinované konštanty SUCCESS a FAILURE a metódu From vrátiť ľubovoľný návratový kód . použite std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } Kód ukončenia::SUCCESS }
- Stabilizovali sa ďalšie možnosti funkcií definovaných pomocou výrazu „const fn“, ktoré možno volať nielen ako regulárne funkcie, ale namiesto konštánt ich použiť aj v akomkoľvek kontexte. Tieto funkcie sa počítajú v čase kompilácie, nie v čase behu, takže podliehajú určitým obmedzeniam, ako napríklad schopnosť čítať iba z konštánt. V novej verzii sú vo vnútri const funkcií povolené základné operácie s ukazovateľmi funkcií (vytváranie, odovzdávanie a prehadzovanie ukazovateľov je povolené, ale nie volanie funkcie ukazovateľom); hranice vlastností pre generické parametre const funkcií, ako napríklad T: Copy; dynamicky prenosné vlastnosti (dyn Trait); impl Typy vlastností pre argumenty funkcií a návratové hodnoty.
- Prúd spracováva Stdin, Stdout a Stderr v std::io má teraz statickú životnosť („static“), keď je uzamknutý, čo umožňuje konštrukcie ako „let out = std::io::stdout().lock();“ so získaním kľučky a nastavením zámku v jednom výraze.
- Nová časť API bola presunutá do kategórie stabilných, vrátane metód a implementácií vlastností boli stabilizované:
- Pin::static_mut
- Pin::static_ref
- Vec::retain_mut
- VecDeque::retain_mut
- Zápis pre kurzor
- std::os::unix::net::SocketAddr::from_pathname
- std::process::ExitCode
- std::process::Ukončenie
- std::thread::JoinHandle::je_dokončené
- Atribút „const“, ktorý určuje možnosť jeho použitia v akomkoľvek kontexte namiesto konštánt, sa používa vo funkciách:
- ::offset a ::offset
- ::wrapping_offset a ::wrapping_offset
- ::add a ::add
- ::sub a ::sub
- ::wrapping_add a ::wrapping_add
- ::wrapping_sub a ::wrapping_sub
- ::as_mut_ptr
- ::as_ptr_range
- ::as_mut_ptr_range
Okrem toho si môžete všimnúť článok „Rust: Kritická retrospektíva“ so súhrnom dojmov z jazyka Rust po napísaní 100 XNUMX riadkov kódu počas vývoja operačného systému mikrojadra Xous používaného vo firmvéri. Medzi nevýhody patrí ťažko zrozumiteľná syntax, neúplnosť a neustály vývoj jazyka, nedostatok opakovateľných zostavení, typické problémy s dôverou v závislosti v Crates.io a potreba zachovať určitú disciplínu pri písaní bezpečného kódu. Funkcie, ktoré prekonali očakávania, zahŕňajú nástroje na refaktorovanie kódu a prepracovanie „hackov“ pridaných počas rýchleho prototypovania.
Zdroj: opennet.ru