Utgivningen av programsprÄket Rust 1.88 har publicerats. Det utvecklades ursprungligen av Mozilla, men drivs nu av den oberoende ideella organisationen Rust Foundation. SprÄket fokuserar pÄ sÀker minneshantering och erbjuder verktyg för att uppnÄ hög parallellism i uppgifter, utan att behöva anvÀnda en skrÀpförvaltare och runtime (runtime reduceras till grundlÀggande initialisering 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:
- Möjligheten att ange flera uttryck "let" inom villkorsblocken "if" och "while" har lagts till, med anvÀndning av operatorn "&&" (logiskt och). "Let"-uttryck kan kombineras med booleska villkorsuttryck. Variabler som deklareras i let-uttryck kan anvÀndas i efterföljande villkorsuttryck samt inom blocken "if" och "while". if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
- Stödet för att skriva "nakna" funktioner, markerade med attributet "#[unsafe(naked)]" och som innehÄller ett enda anrop av "naked_asm!", har lagts till. Funktioner skapade pÄ detta sÀtt har ingen epilog och prolog som genereras av compilern, vilket gör att utvecklaren helt kan kontrollera den tjÀnste-assemblykod som kopplas till funktionen (en "naken" funktion innehÄller endast de assemblyinstruktioner som anges av utvecklaren och inkluderar inga speciella hanterare för argument och returvÀrden som lÀggs till av compilern). "Nakna" funktioner betraktas som ett mer praktiskt alternativ till funktioner som definieras i "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" ); }
- PredikatssprÄket som anvÀnds i attributen för villkorlig kompilering "cfg" och "cfg_attr" (som möjliggör inkludering eller uteslutning av koddelar beroende pÄ angivna villkor) har fÄtt stöd för boolska litteraler "true" och "false", som stÄr för konfigurationer som alltid Àr aktiverade eller alltid avaktiverade. Dessa litteraler kan Àven anvÀndas i makrot "cfg!" och tabellerna "[target]" i manifest och konfigurationer för Cargo. Uttrycken cfg(true) och cfg(false) kan anvÀndas istÀllet för cfg(all()) och cfg(any()) för ett mer tydligt uttryck för sina avsikter.
- I paketadministratören Cargo har automatisk start av skrĂ€prensaren inkluderats för att rensa cachen i anvĂ€ndarens hemmakatalog. Tidigare rensades inte de paket som sparades i cachen med nedladdade beroenden, vilket ledde till en konstant ökning av diskanvĂ€ndningen. Den aktiverade skrĂ€prensningsmekanismen kommer automatiskt att ta bort extern nedladdade crate-filer som inte har anvĂ€nts pĂ„ mer Ă€n 3 mĂ„nader, samt lokalt installerade crate-filer som inte har anvĂ€nts pĂ„ mer Ă€n en mĂ„nad. Cachen rensas inte om Crate-anvĂ€ndning sker med alternativen "âoffline" eller "âfrozen".
- En ny uppsÀttning API har blivit stabiliserad, inklusive stabilisering av metoder och implementeringar av traits:
- Cell::update
- impl Default for *const T
- impl Default for *mut T
- mod ffi::c_str
- HashMap::extract_if
- HashSet::extract_if
- hint::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
- ::as_chunks
- ::as_rchunks
- ::as_chunks_unchecked
- ::as_chunks_mut
- ::as_rchunks_mut
- ::as_chunks_unchecked_mut
- Indikatorn "const" har tillÀmpats i funktioner:
- NonNull::replace
- ::replace
- std::ptr::swap_nonoverlapping
- Cell::replace
- Cell::get
- Cell::get_mut
- Cell::from_mut
- Cell::as_slice_of_cells
- Den första nivÄn av stöd för mÄljukvaruplattformen i686-pc-windows-gnu har tagits bort.
Man kan Àven nÀmna hÀndelser relaterade till Rust:
- Projektet Munal OS utvecklar ett experimentellt operativsystem skrivet i Rust och baserat pÄ konceptet unikernel. I Munal OS anvÀnds ingen preemptiv flerkapacitet, sidmappning och virtuellt adressutrymme (minneslayout frÄn UEFI anvÀnds). KÀrnan och applikationerna körs i samma adressutrymme med en sÀkerhetsmodell baserad pÄ sandbox-isolering WASM (inkluderar wasmi-motorn för att köra applikationer i WebAssembly bytekod).
Operativsystemet har ett grafiskt grÀnssnitt och stödjer styrning via tangentbord och mus. För utveckling av grafiska applikationer anvÀnds ett eget toolkit med en widget-bibliotek. För nÀtverkskommunikation erbjuds TCP-stack och drivrutin för nÀtverksenhet. Bland de tillgÀngliga applikationerna för Munal OS finns: en webblÀsare med grundlÀggande stöd för HTML och HTTPS, en textredigerare och en terminal för att utföra kod i Python. Koden Àr öppen under MIT-licensen.

- KÀrnan Asterinas 0.15.2 har slÀppts, skriven i Rust och som tillhandahÄller ett ABI kompatibelt med Linux-kÀrnan. KÀrnan stöder arkitekturerna x86-64 och RISC-V och implementerar 206 av 368 systemanrop i Linux. 45 utvecklare, frÀmst frÄn olika kinesiska universitet, deltar i utvecklingen av kÀrnan. KÀrnan Àr byggd med hjÀlp av arkitekturen "framekernel", dÀr kÀrnkomponenterna placeras i ett gemensamt adresseringsutrymme, och sÀkerhet uppnÄs genom logisk uppdelning av sÀker kod och kod dÀr sÀkerhetsproblem kan uppstÄ. Alla systemanrop, filsystem och drivrutiner implementeras pÄ OS Services-nivÄ och kan inte innehÄlla osÀkra block. Koden distribueras under licensen MPL 2.0.
- För Linux-kÀrnan har verktyget rsched förberetts, vilket gör det möjligt att analysera statistik om schemalÀggarens arbete. I praktiken gör verktyget det möjligt att utvÀrdera schemalÀggningsbeslut relaterade till resursfördelning till processer, samt att spÄra eventuella fördröjningar vid schemalÀggning. För datainsamling i kÀrnan anvÀnds BPF-subsystemet, och verktygsomrÄdet för anvÀndarutrymmet Àr skrivet i Rust. Utvecklaren av verktyget Àr Chris Mason, skaparen och huvudsakliga arkitekten av filsystemet Btrfs.
- Företaget Collabora har meddelat att en variant av verktyget Coccinelle för sprÄk som Rust har utvecklats. Coccinelle Àr ursprungligen avsett för att automatisera sökningen och konverteringen av C-kod i Linux-kÀrnan. Konverteringarna anges i form av regler som liknar abstrakta patchar, oberoende av specifika positioner i koden.
- Utvecklarna av GNOME har presenterat ett bibliotek för bildladdning, glycin, skrivet i Rust, som möjliggör avkodning av bilder med hjÀlp av sandbox-isolering. Stödet finns för att leverera avkodat innehÄll via gdk::Textures och extrahera metadata. Om bekvÀmligheter för anvÀndning av glycin i GTK4 tillhandahÄlls, samt en backend för att anvÀnda glycin i GdkPixbuf-biblioteket, som anvÀnds i GNOME för bildladdning. Glycin anvÀnds redan i bildvisaren Loupe, som erbjuds i GNOME som standard. Backend för GdkPixbuf ger möjlighet att anvÀnda glycin i GNOME Shell, miniatyrgeneratorer och andra GNOME-applikationer, utan att Àndra dessa program.
KĂ€lla: opennet.ru

