Byl vydán nový release jazyka programování Rust 1.79, který byl původně založen projektem Mozilla, a nyní je vyvíjen pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se soustředí na bezpečné zacházení s pamětí a poskytuje prostředky pro dosažení vysokého paralelismu při práci, aniž by potřeboval garbage collector a runtime (runtime zahrnuje pouze základní inicializaci a údržbu standardní knihovny).
Metody práce s pamětí v Rustu zbavují vývojáře chyb při manipulaci s ukazateli a chrání před problémy, které vznikají z nízkoúrovňové manipulace s pamětí, jako je přístup k oblasti paměti po jejím uvolnění, dereferencování nulových ukazatelů, přetečení bufferu atd. Pro distribuci knihoven, zajištění sestavení a správu závislostí se vyvíjí balíčkový manažer Cargo. Pro hostování knihoven je k dispozici repozitář crates.io.
Bezpečné manipulace s pamětí jsou v Rustu zajištěny během kompilace prostřednictvím kontroly referencí, sledování vlastnictví objektů, zohlednění doby života objektů (viditelnosti) a hodnocení správnosti přístupu k paměti při vykonávání kódu. Rust také poskytuje prostředky pro 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ě, aplikuje koncept neměnnosti (immutable) referencí a proměnných ve výchozím nastavení a nabízí silnou statickou typizaci pro minimalizaci logických chyb.
Hlavní novinky:
- Byla přidána podpora inline konstant, které lze uvádět přímo v kódu pomocí bloků „const { … }“, zpracovávaných v kontextu konstant a umožňujících vyhnout se samostatnému definování konstant. Kód uvedený v bloku „const { … }“ se vyhodnocuje v době kompilace a používá se jako konstanta, bez vykonávání během běhu programu. Na rozdíl od definování konstant pomocí výrazu „const ITEM: … = …“ v blocích „const { … }“ není nutné uvádět typ, protože zde je podporována automatická inference typů. Například kód se samostatným definováním konstanty
const EMPTY: Option<Vec> = None;
let foo = [EMPTY; 100];lze nahradit použitím na místě:
let foo = [const { None }; 100];
- Byl stabilizován syntaktický prvek „T: Trait“ pro definování omezení na pozicích asociativního typu, který umožňuje zkrátit definici výrazů s vnořenými omezeními typů, jež dříve vyžadovala určení vnořeného impl Trait nebo několika podmínek „where.“
- Bylo zajištěno automatické prodloužení životnosti dočasných hodnot, které se používají v konstrukcích „match“ a „if.“
let a = if true {
..;
&temp() // životnost bude prodloužena
} else {
..;
&temp() // životnost bude prodloužena
}; - Byla stabilizována možnost importovat funkci main z jiných modulů a crate balíčků.
- Při sestavování standardní knihovny je v kompilátoru využit příznak „-Cforce-frame-pointers=yes“, který přidává data pro rekonstrukci zásobníku během profilování programů.
- Nová sada API byla převedena do stabilního stavu, včetně stabilizovaných metod a implementací typů:
- {integer}::unchecked_add
- {integer}::unchecked_mul
- {integer}::unchecked_sub
- ::split_at_unchecked
- ::split_at_mut_unchecked
- ::utf8_chunks
- str::Utf8Chunks
- str::Utf8Chunk
- ::is_aligned
- ::is_aligned
- NonNull::is_aligned
- ::len
- ::len
- ::is_empty
- ::is_empty
- NonNull::::is_empty
- CStr::count_bytes
- io::Error::downcast
- num::NonZero
- path::absolute
- proc_macro::Literal::byte_character
- proc_macro::Literal::c_string
- Znak „const“, určující možnost použití v jakémkoli kontextu místo konstant, je použit ve funkcích:
- Atomic*::into_inner
- io::Cursor::new
- io::Cursor::get_ref
- io::Cursor::position
- io::empty
- io::repeat
- io::sink
- panic::Location::caller
- panic::Location::file
- panic::Location::line
- panic::Location::column
- Stabilizováno
část funkcí, které lze použít při kompilaci do mezilehlého formátu Webassembly (WASM). - Byla realizována třetí úroveň podpory pro platformy aarch64-apple-visionos, aarch64-apple-visionos-sim a riscv32ima-unknown-none-elf. Třetí úroveň zahrnuje základní podporu, ale bez automatizovaného testování, publikace oficiálních sestavení a ověření možnosti sestavení kódu.
- Byla realizována druhá úroveň podpory cílových platforem aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm a x86_64-pc-windows-gnullvm. Druhá úroveň podpory zahrnuje záruku sestavení.
Kromě toho organizace Rust Foundation, která spravuje ekosystém spojený s jazykem Rust, oznámila vytvoření konsorcia „Safety-Critical Rust Consortium“, jehož cílem je využití jazyka Rust v řešeních vyžadujících vysokou spolehlivost (Safety-Critical Software), jejichž selhání může ohrozit životy lidí, poškodit životní prostředí nebo vést k vážným poškozením zařízení. Konsorciu se připojily společnosti ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle a Woven by Toyota. Mezi úkoly, které bude konsorcium řešit, patří psaní příruček a vývoj knihoven, linterů a statických analyzátorů, stejně jako použití metod formální verifikace spolehlivosti a vývoj podmnožin jazyka pro vysoce spolehlivé systémy.
Mezi projekty spojenými s vysoce spolehlivými systémy lze zmínit Verus — nástroj pro ověřování správnosti kódu napsaného v jazyce Rust. Ověření probíhá definováním specifikace, která popisuje přípustné chování kódu. Během provádění spustitelného kódu Verus ověřuje soulad se specifikací pro potvrzení správné funkce.
Zdroj: opennet.ru
