Utgivningen av programmeringssprÄket Rust 1.92 har publicerats. Det grundades av Mozilla men utvecklas nu under delfinansiering av den oberoende, icke-vinstdrivande organisationen Rust Foundation. SprÄket fokuserar pÄ sÀker minneshantering och tillhandahÄller verktyg för att uppnÄ hög parallellism för uppgiftskörning, utan att anvÀnda en avfallshanterare eller runtime (runtime begrÀnsas till grundlÀggande initialization och underhÄll av standardbiblioteket).
Minneshanteringsmetoderna i Rust skyddar utvecklare frÄn att göra fel vid manipulering av pekare och skyddar mot problem som uppstÄr vid lÄg nivÄ minnesarbete, sÄsom att komma Ät minnesomrÄden efter att de har frigjorts, dereferera nullpekare, buffer overflow, etc. För distribution av bibliotek, byggande och hantering av projektberoenden utvecklas paketförvaltaren Cargo. För lagring av bibliotek stöds ett repository pÄ crates.io.
SÀker minneshantering sÀkerstÀlls i Rust under kompilering genom att kontrollera referenser, spÄra Àgandeskap över objekt, ta hÀnsyn till livslÀngden av objekt (synlighet) och utvÀrdera korrekt minnesÄtkomst under körning av koden. Rust erbjuder ocksÄ verktyg för att skydda mot heltalsöverflöden, krÀver obligatorisk initialisering av variabelvÀrden innan de anvÀnds, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet av oförÀnderliga (immutable) referenser och variabler som standard och erbjuder stark statisk typning för att minimera logiska fel.
Huvudsakliga nyheter:
- Stabilisering av typen "never", som betecknas av symbolen "!" och definierar berÀkningar som aldrig returnerar vÀrden (till exempel returnerar funktionen "exits", makrot "panic!" och oÀndliga loopar aldrig kontrollen). I den nya versionen har lint-kontrollerna "never_type_fallback_flowing_into_unsafe" och "dependency_on_unit_never_type_fallback" som standard vÀxlat frÄn att rapportera varningar till att generera kompilationsfel. Dessa kontroller utlöses vid problem i koden som uppstÄr vid anvÀndning av typen "never".
En preliminÀr bedömning visar att liknande problem förekommer i cirka 500 crate-paket. Aktivering av lint-kontroller kommer att förbereda för stabiliseringen av typen "never", som för nÀrvarande klassas som en experimentell funktion. Lint-kontroller utlöses endast vid direkt kompilering av paket och visas inte vid kompilering av beroenden. Kontroller kan ocksÄ stÀngas av med hjÀlp av attributet "#[allow]".
- Beteendet för lint-kontrollen "unused_must_use" har Ă€ndrats, som utlöses nĂ€r ett returvĂ€rde frĂ„n en funktion ignoreras, om funktionen eller returtypen Ă€r markerad med attributet "#[must_use]". I den nya versionen upphörs varningar om att ignorera returvĂ€rden med typerna Result och ControlFlow, dĂ€r felstatusen bestĂ€ms av typen utan vĂ€rden ("!" eller "Infallible"). Till exempel, "fn can_never_fail() -> Result {âŠ}".
- Beteendet för flaggan "-Cpanic=abort" har förÀndrats, nÀr den anges aktiveras som standard genereringen av unwind-tabeller för att utföra backtrace. För att ÄtergÄ till det gamla beteendet finns alternativet "-Cforce-unwind-tables=no".
- Kontrollen av argumenten för attributet «#[macro_export]» har skÀrpts. Nu kommer ett felmeddelande att visas istÀllet för en varning om ogiltiga attribut anges. Problem med «#[macro_export]» kommer att kontrolleras inte bara vid direkt sammansÀttning av crate-paketet, utan Àven vid sammanstÀllning av beroenden.
- I sÀker kod Àr det tillÄtet att fÄ raw-pekarna («&raw [mut | const]») pÄ fÀlt i union-typer.
- För den mÄlplattformen mips64el-unknown-linux-muslabi64 har stöd för dynamisk lÀnkning implementerats.
- Den minimi stödda versionen av externa verktyg LLVM har höjts till branch LLVM 20.
- En ny uppsÀttning API har blivit stabiliserad, inklusive stabilisering av metoder och implementeringar av traits:
- NonZero::div_ceil
- Location::file_as_c_str
- RwLockWriteGuard::downgrade
- Box::new_zeroed
- Box::new_zeroed_slice
- Rc::new_zeroed
- Rc::new_zeroed_slice
- Arc::new_zeroed
- Arc::new_zeroed_slice
- btree_map::Entry::insert_entry
- btree_map::VacantEntry::insert_entry
- impl Extend for proc_macro::TokenStream
- impl Extend for proc_macro::TokenStream
- impl Extend for proc_macro::TokenStream
- impl Extend for proc_macro::TokenStream
- Indikatorn "const" har tillÀmpats i funktioner:
- ::rotate_left
- ::rotate_right
- I paketchefen Cargo har operationen «git fetch» sÀkerstÀllts att upprepas vid misslyckande av den första begÀran. Komponenter för integration med terminalemulatorn Ghostty har lagts till. En ny kapitel om optimering av byggprocessen har lagts till i dokumentationen.
Man kan Àven nÀmna nyligen tillkÀnnagivna projekt och hÀndelser relaterade till Rust:
- Företaget Ferrocene har meddelat att de har genomgÄtt certifiering enligt IEC 61508 (SIL 2) för biblioteket libcore, som inkluderar en delmÀngd av anrop frÄn Rusts standardbibliotek. Certifieringen bekrÀftar att biblioteket uppfyller kraven för kritiska industriella system. Ferrocene Àr kÀnd för att skapa verktyg för utveckling av applikationer för kritiska system (Safety-Critical Systems) pÄ Rust, samt för att upprÀtthÄlla FLS-specifikationen (Ferrocene Language Specification), som Àr basen för den referensspecifikation som utvecklas för sprÄket Rust.
- UtgÄvan av biblioteket Iced 0.14 för att skapa grafiska anvÀndargrÀnssnitt med hjÀlp av reaktiv programmeringsmodell har publicerats. I Iced har en arkitektur implementerats som Àr bekant för utvecklare som kÀnner till deklarativt grÀnssnittsbyggande med Elm. Det erbjuds en uppsÀttning fÀrdiga widgets med möjlighet att skapa asynkrona hanterare och tillÀmpa adaptiv layout av grÀnssnittselement beroende pÄ fönster- och skÀrmstorlek. Flera renderingmotorer som stödjer Vulkan, Metal och DX12 tillhandahÄlls. Bland de större projekten som anvÀnder Iced kan arbetsmiljön COSMIC nÀmnas.
Den nya versionen innehÄller widgets "table", "grid", "sensor", "float" och "pin", samt utökar funktionerna för widgeten som arbetar med Markdown-format. Implementerat: reaktiv rendering; scrollbar som visas vid behov; API för animationshantering; stöd för inmatningsmetoder; headless-lÀge; möjlighet att göra Àndringar utan att stoppa applikationen (hot reloading); parallell avkodning av bilder; verktyg för felsökning och prestandaövervakning.
- Projektet Ribir utvecklar ett bibliotek för att skapa plattformsoberoende applikationer med grafiskt grÀnssnitt, vilket gör det möjligt att anvÀnda en gemensam kodbas för olika plattformar (Linux, Windows, macOS, planerat för Android och iOS). Ett deklarativt sprÄk för grÀnssnittsbygge baserat pÄ Rust-makron Àr tillgÀngligt, tillsammans med över 20 widgets, teman och rendering baserad pÄ wgpu.
- Verktyget Island har presenterats för isolerad körning av applikationer. För sandbox-isolering anvÀnds mekanismen Landlock. Island gör det möjligt att skapa regler i TOML-format och tillÀmpa dem för att isolera befintliga körbara filer med hjÀlp av Landlock, utan att Àndra koden. Till skillnad frÄn Firejail krÀver verktyget Island inga root-rÀttigheter eller sÀrskilda behörigheter.
- Google har lanserat Wasefire, ett verktyg för utveckling av sĂ€kra firmware som Ă€r skrivet i Rust. HuvudidĂ©n Ă€r att köra separata isolerade hanterare (applet) ovanpĂ„ den grundlĂ€ggande firmware-miljön (plattformen). Utvecklingen av firmware Ă€r inte bunden till programmeringssprĂ„k â firmware-komponenter kan levereras i WebAssembly-format med WASI (WebAssembly System Interface) och köras med hjĂ€lp av Wasmtime.
- Utgivningen av UEFI-firmware Patina 18, skriven i Rust, har offentliggjorts. Patina erbjuder en ersÀttning för de grundlÀggande komponenterna i UEFI-firmware och kan anvÀndas för en gradvis övergÄng av existerande firmware, skrivna i C, till anvÀndning av Rust.
- Projektet Brimstone utvecklar en ny JavaScript-motor, skriven frÄn grunden i Rust. I nuvarande version stöds redan mer Àn 97 % av funktionerna i ECMAScript 2026. Virtuella maskinen för att köra bytecode Àr skapad med hÀnsyn till arkitekturen i motorerna V8.
- Projektet Catten utvecklar en kÀrna för det experimentella operativsystemet CharlotteOS, skrivet i Rust. KÀrnan stödjer Ätkomstkontroll baserat pÄ "capability" (i likhet med Fuchsia) och anvÀnder en resurshierarki som liknar Plan 9 med filvÀgar adresserade via URI.
- UtgÄvan av den interaktiva kommandotolken Fish 4.2.0 (vÀnlig interaktiv skal) har publicerats. Grenen 4.x kÀnnetecknas av en fullstÀndig översÀttning av kodbasen frÄn C++ till Rust.
- Företaget Cloudflare har öppnat koden för Rust-biblioteket tokio-quiche, för att integrera stöd för protokollen QUIC och HTTP/3 i asynkront fungerande applikationer baserade pÄ ramverket Tokio.
- Projektet Tor har publicerat versionerna Arti 1.7 och 1.8, implementeringar av Tor-verktygsuppsÀttningen, skriven i Rust. NÀr koden Arti nÄr en nivÄ som helt kan ersÀtta C-versionen, avser Tor-utvecklarna att ge Arti status som huvudimplementering av Tor och gradvis avbryta underhÄllet av C-implementeringen.
Den nya versionen stabiliserar implementeringen av begrÀnsad upptÀckts av onion-tjÀnster med hjÀlp av klientautorisering ("restricted-discovery"). Utöver SOCKS-proxy har stöd för HTTP-proxy, som anvÀnder CONNECT-metoden, lagts till. Adaptiv tidsinstÀllning av timeouts har implementerats beroende pÄ belastningen. Experimentellt stöd för tokio-console har lagts till. Utvecklingen av funktionaliteten för relÀer och servrar behörigheter (Directory Authority) fortsÀtter. En ny kommando "arti hsc ctor-migrate" har lagts till för att överföra nycklar frÄn C-klienten till Arti:s nyckellager. InstÀllningar för att styra start av onion-tjÀnster har lagts till.
- Den Rust-baserade databasen RustDB har publicerats, skapad med inspiration frÄn PostgreSQL. GrundlÀggande SQL-operationer stödjs (CREATE/DROP TABLE/VIEW, INSERT, SELECT, UPDATE, DELETE, SHOW TABLES, EXPLAIN, VACUUM), transaktioner, MVCC, WAL (Write-Ahead Log), indexering, anslutning via PostgreSQL-kompatibel protokoll. AI anvÀndes vid skrivandet av RustDB.
KĂ€lla: opennet.ru
