Bylo zveřejněno vydání univerzálního programovacího jazyka Rust 1.88, 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:
- Přidána možnost zadat více výrazů „let“ uvnitř podmíněných bloků „if“ a „while“ jejich kombinací pomocí logického operátoru „&&“. Výrazy „let“ lze kombinovat s booleovskými podmíněnými výrazy. Proměnné deklarované ve výrazech let lze použít v následných podmíněných výrazech a také uvnitř bloků „if“ a „while“. if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
- Přidána podpora pro psaní „nakovaných“ funkcí, označených atributem „#[unsafe(naked)]“ a obsahujících uvnitř jedno volání „naked_asm!“. Funkce vytvořené tímto způsobem nemají epilog a prolog generovaný kompilátorem, což umožňuje vývojáři plně kontrolovat kód assembleru služby připojený k funkci („nakovaná“ funkce obsahuje pouze instrukce assembleru specifikované vývojářem a neobsahuje speciální obslužné rutiny argumentů a návratových hodnot přidané kompilátorem). „Naké“ funkce jsou považovány za pohodlnější alternativu k funkcím definovaným v bloku „global_asm!“. #[unsafe(naked)] pub unsafe extern "sysv64" fn wrapping_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( "add rax, rdi, rsi", "ret" ); }
- Predikátový jazyk používaný v atributech podmíněné kompilace „cfg“ a „cfg_attr“ (které povolují nebo zakazují části kódu na základě zadaných podmínek) byl rozšířen o podporu booleovských literálů „true“ a „false“, které jsou identifikovány s konfiguracemi, jež jsou vždy povoleny nebo vždy zakázány. Tyto literály lze také použít v makru „cfg!“ a tabulkách „[target]“ v manifestech a konfiguracích Cargo. Výrazy cfg(true) a cfg(false) lze použít místo výrazů cfg(all()) a cfg(any()) pro explicitnější vyjádření jejich záměru.
- Správce balíčků Cargo nyní automaticky spouští garbage collector pro vyčištění mezipaměti v domovském adresáři uživatele. Dříve se balíčky se staženými závislostmi uloženými v mezipaměti nečistily, což vedlo k neustálému nárůstu spotřeby místa na disku. Povolený mechanismus garbage collector automaticky odstraní externě stažené soubory crate, ke kterým nebyl přístup déle než 3 měsíce, a lokálně nainstalované soubory crate, ke kterým nebyl přístup déle než měsíc. Čištění mezipaměti se nespustí při použití voleb „--offline“ nebo „--frozen“ v crage.
- Nová část API byla přesunuta do kategorie stabilní, včetně metod a implementací vlastností byly stabilizovány:
- Cell::update
- Výchozí hodnota pro *const T
- Výchozí hodnota pro *mut T
- mod ffi::c_str
- HashMap::extract_if
- HashSet::extract_if
- nápověda::select_unpredictable
- proc_macro::Span::line
- proc_macro::Span::column
- proc_macro::Span::start
- proc_macro::Span::end
- proc_macro::Span::file
- proc_macro::Span::local_file
- <[T]>::as_chunks
- <[T]>::as_rchunks
- <[T]>::as_chunks_unchecked
- <[T]>::as_chunks_mut
- <[T]>::as_rchunks_mut
- <[T]>::as_chunks_unchecked_mut
- Znak „const“ se používá ve funkcích:
- NonNull ::nahradit
- <*mut T>::nahradit
- std::ptr::swap_nonoverlapping
- Cell::replace
- Cell::get
- Cell::get_mut
- Cell::from_mut
- Buňka::as_slice_of_cells
- Odebrána první úroveň podpory pro cílovou platformu i686-pc-windows-gnu.
Dále si můžeme všimnout následujících událostí souvisejících s rzí:
- Projekt Munal OS vyvíjí experimentální operační systém napsaný v Rustu a založený na konceptu unikernelu. Munal OS nepoužívá preemptivní multitasking, mapování paměťových stránek ani virtuální adresní prostor (používá rozložení paměti UEFI). Jádro a aplikace jsou spouštěny ve stejném adresním prostoru pomocí bezpečnostního modelu založeného na izolaci sandboxu WASM (obsahuje engine wasmi pro spouštění aplikací ve formě bajtkódu WebAssembly).
Operační systém má grafické rozhraní a podporuje ovládání pomocí klávesnice a myši. Pro vývoj grafických aplikací se používá proprietární sada nástrojů s knihovnou widgetů. Pro síťovou interakci je k dispozici TCP stack a ovladač síťového zařízení. Mezi aplikace dostupné pro Munal OS patří webový prohlížeč se základní podporou HTML a HTTPS, textový editor a terminál pro spouštění kódu Pythonu. Kód je otevřen pod licencí MIT.

- Bylo vydáno jádro Asterinas verze 0.15.2, napsané v Rustu a poskytující ABI kompatibilní s jádrem. LinuxJádro podporuje architektury x86-64 a RISC-V a implementuje 206 z 368 systémových volání. LinuxNa vývoji jádra se podílí čtyřicet pět vývojářů, převážně z různých čínských univerzit. Jádro je postaveno s využitím architektury „framekernel“, ve které jsou komponenty jádra umístěny ve sdíleném adresním prostoru a zabezpečení je dosaženo logickým oddělením zabezpečeného kódu od kódu, který může být zranitelný vůči bezpečnostním problémům. Všechna systémová volání, souborové systémy a ovladače jsou implementovány na vrstvě OS Services a nemohou obsahovat nebezpečné bloky. Kód je distribuován pod licencí MPL 2.0.
- Pro jádro Linux Nástroj rsched byl vyvinut pro analýzu statistik plánovače úloh. V praxi tento nástroj umožňuje vyhodnocovat rozhodnutí plánovače týkající se alokace zdrojů procesům a sledování zpoždění plánování. Jádro používá pro sběr dat subsystém BPF a nástrojová řada pro uživatelský prostor je napsána v Rustu. Autorem nástroje je Chris Mason, tvůrce a hlavní architekt souborového systému Btrfs.
- Společnost Collabora oznámila vývoj verze sady nástrojů Coccinelle specifické pro Rust. Coccinelle je primárně navržena k automatizaci vyhledávání a transformace kódu C v jádře. LinuxTransformace jsou specifikovány ve formě pravidel, připomínajících abstraktní záplaty, které nejsou vázány na konkrétní pozici v kódu.
- Vývojáři GNOME představili glycin, knihovnu pro načítání obrázků napsaných v Rustu, která poskytuje dekódování obrázků v sandboxu. Podporuje poskytování dekódovaného obsahu prostřednictvím gdk::Textures a extrakci metadat. Pro použití glycinu v GTK4 jsou k dispozici vazby a také backend pro použití glycinu v knihovně GdkPixbuf používané v GNOME pro načítání obrázků. Glycin se již používá v prohlížeči obrázků Loupe, který je v GNOME nabízen standardně. Zároveň backend pro GdkPixbuf umožňuje používat glycin v prostředí GNOME Shell, generátorech miniatur a libovolných aplikacích GNOME bez nutnosti provádět změny v těchto programech.
Zdroj: opennet.ru

