Vydání programovacího jazyka Rust 1.61

Bylo zveřejněno vydání univerzálního programovacího jazyka Rust 1.61, založeného projektem Mozilla, ale nyní vyvíjeného pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se soustředí na bezpečnost paměti a poskytuje prostředky k dosažení vysokého paralelismu úloh a zároveň se vyhýbá použití garbage collectoru a runtime (runtime je redukováno na základní inicializaci a údržbu standardní knihovny).

Metody zpracování paměti Rust šetří vývojáře před chybami při manipulaci s ukazateli a chrání před problémy, které vznikají v důsledku nízkoúrovňového zpracování paměti, jako je přístup k oblasti paměti po jejím uvolnění, dereferencování nulových ukazatelů, přetečení vyrovnávací paměti atd. Pro distribuci knihoven, poskytování sestavení a správu závislostí projekt vyvíjí správce balíčků Cargo. Úložiště crates.io je podporováno pro hostování knihoven.

Bezpečnost paměti je v Rustu zajištěna v době kompilace prostřednictvím kontroly referencí, sledování vlastnictví objektů, sledování životnosti objektů (rozsahů) a hodnocení správnosti přístupu do paměti během provádění kódu. Rust také poskytuje ochranu proti přetečení celých čísel, vyžaduje povinnou inicializaci hodnot proměnných před použitím, lépe zpracovává chyby ve standardní knihovně, standardně aplikuje koncept neměnných referencí a proměnných, nabízí silné statické typování pro minimalizaci logických chyb.

Hlavní inovace:

  • Z hlavní funkce je možné definovat vlastní návratové kódy. Původně mohla hlavní funkce Rustu vracet pouze typ "()" (jednotka), který vždy označoval stav úspěšného ukončení, pokud vývojář výslovně nezavolal funkci "process::exit(code)". V Rustu 1.26 bylo pomocí nestabilní vlastnosti Termination v hlavní funkci možné vrátit hodnoty „Ok“ a „Err“, odpovídající kódům EXIT_SUCCESS a EXIT_FAILURE v programech C. V Rust 1.61 byla vlastnost Termination stabilní a byl navržen samostatný typ ExitCode, který představuje specifický návratový kód, který abstrahuje typy návratů specifické pro platformu tím, že poskytuje jak předdefinované konstanty SUCCESS a FAILURE, tak metodu From. vrátit vlastní návratový kód. použijte std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } Kód ukončení::SUCCESS }
  • Byly stabilizovány další schopnosti funkcí definovaných pomocí výrazu „const fn“, které lze volat nejen jako regulární funkce, ale také je místo konstant používat v libovolném kontextu. Tyto funkce se počítají v době kompilace, nikoli za běhu, takže podléhají určitým omezením, jako je schopnost číst pouze z konstant. V nové verzi jsou uvnitř funkcí const povoleny základní operace s ukazateli funkcí (je povoleno vytváření, předávání a přehazování ukazatelů, ale ne volání funkce ukazatelem); hranice vlastností pro obecné parametry funkcí const, jako je T: Copy; dynamicky dispatchovatelné vlastnosti (dyn Trait); impl Typy vlastností pro argumenty funkcí a návratové hodnoty.
  • Proud zpracovává Stdin, Stdout a Stderr v std::io má nyní statickou životnost ("'static"), když je uzamčen, což umožňuje konstrukce jako "let out = std::io::stdout().lock();" se získáním kliky a nastavením zámku jedním výrazem.
  • Nová část API byla přesunuta do kategorie stabilní, včetně metod a implementací vlastností byly stabilizovány:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Zápis pro kurzor<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Ukončení
    • std::thread::JoinHandle::je_dokončeno
  • Atribut "const", který určuje možnost jeho použití v libovolném kontextu místo konstant, se používá ve funkcích:
    • <*const T>::offset a <*mut T>::offset
    • <*const T>::wrapping_offset a <*mut T>::wrapping_offset
    • <*const T>::add a <*mut T>::add
    • <*const T>::sub a <*mut T>::sub
    • <*const T>::wrapping_add a <*mut T>::wrapping_add
    • <*const T>::wrapping_sub a <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Kromě toho si můžete povšimnout článku „Rust: Critical Retrospective“ se shrnutím dojmů z jazyka Rust po napsání 100 tisíc řádků kódu během vývoje operačního systému mikrojádra Xous používaného ve firmwaru. Mezi nevýhody patří obtížně srozumitelná syntaxe, neúplnost a neustálý vývoj jazyka, nedostatek opakovatelných sestavení, typické problémy s důvěrou v závislost na Crates.io a potřeba udržovat určitou disciplínu při psaní bezpečného kódu. Mezi funkce, které předčily očekávání, patří nástroje pro refaktorování kódu a přepracování „hacků“ přidaných během rychlého prototypování.

Zdroj: opennet.ru

Přidat komentář