ProgrammeringssprÄket Rust 1.99, grundat av Mozilla-projektet men nu utvecklat under beskydd av den oberoende ideella organisationen Rust Foundation, har slÀppts. SprÄket fokuserar pÄ minnessÀkerhet och tillhandahÄller verktyg för att uppnÄ hög parallellitet i uppgiftskörningen, samtidigt som man slipper anvÀnda en garbage collector och runtime (körtiden reduceras till grundlÀggande initialisering och underhÄll av standardbiblioteket).
Rusts minneshanteringsmetoder Àr utformade för att eliminera fel i pekarmanipulation och skydda mot problem som uppstÄr vid minneshantering pÄ lÄg nivÄ, sÄsom Ätkomst till minne efter att det har frigjorts, avreferensering av nullpekare, buffertöverskridningar och sÄ vidare. Projektet utvecklar pakethanteraren Cargo för att distribuera bibliotek, underlÀtta byggen och hantera beroenden. crates.io-arkivet underhÄlls för att vara vÀrd för bibliotek.
MinnessÀkerhet tillhandahÄlls i Rust vid kompilering genom referenskontroll, hÄlla reda pÄ objektÀgande, hÄlla reda pÄ objektlivslÀngder (scopes) och bedöma riktigheten av minnesÄtkomst under kodexekvering. Rust ger ocksÄ skydd mot heltalsspill, krÀver obligatorisk initiering av variabelvÀrden innan anvÀndning, hanterar fel bÀttre i standardbiblioteket, tillÀmpar konceptet med oförÀnderliga referenser och variabler som standard, erbjuder stark statisk typning för att minimera logiska fel.
Huvudsakliga innovationer:
- Rust lÄter dig nu skapa variadiska funktioner som exporteras för anrop frÄn C-projekt (C ABI). Det sista elementet i parameterlistan i sÄdana funktioner kan vara "..."-konstruktionen, som hanteras i Rust med en speciell typ, VaList, som fungerar pÄ liknande sÀtt som va_list i C. unsafe extern "C" fn sum(mut args: ...) -> i32 { let a = unsafe { args.next_arg:: () }; lÄt b = osÀker { args.next_arg:: () }; a + b } fn foo() -> i32 { osÀker { summa(0i32, 2i32) } }
- Funktionerna Layout::for_value_raw, mem::size_of_val_raw och mem::align_of_val_raw har stabiliserats för att möjliggöra sÀker storleksjustering och justering av rÄpekare, inklusive nÀr dynamiskt storleksanpassade typer som skivor anvÀnds, utan att behöva skapa datareferenser.
- Dokumentationen rekommenderar nu att man undviker att frigöra minne som refererats statiskt med en obestÀmd livslÀngd (&'static) via ett anrop till Box::leak (rundtursavlÀckning), eftersom denna ÄtgÀrd potentiellt kan leda till problem pÄ grund av inkompatibilitet med framtida kompilatoroptimeringar och inpluggbara minnesallokeringsmekanismer. IstÀllet för att skapa en statisk referens för tillfÀlliga Àgaröverföringar rekommenderas det att anvÀnda rÄa pekare, till exempel via ett anrop till Box::into_non_null.
- En ny del av API:t har flyttats till kategorin stabil, inklusive metoder och implementeringar av egenskaper har stabiliserats:
- IntoIterator för Box<[T; N]>
- IntoIterator för &Box<[T; N]>
- IntoIterator för &mut Box<[T; N]>
- VecDeque::retain_back
- core::ffi::VaList
- Box::into_non_null
- Box::from_non_null
- Vec::into_parts
- Vec::from_parts
- core::mem::size_of_val_raw
- core::mem::align_of_val_raw
- core::alloc::Layout::for_value_raw
- String::from_utf8_lossy_owned
- strÀng::FromUtf8Error::into_utf8_lossy
- FusedIterator för StepBy
- std::fs::set_times
- std::fs::set_times_nofollow
- Pakethanteraren Cargo har nu en ny inbyggd "debug"-profil, liknande "dev"-profilen (felsöknings- och utvecklingsfunktioner planeras att separeras i framtiden). Stegvis kompilering Àr inaktiverat som standard vid byggande i CI.
- MÄlplattformen riscv64-unknown-linux-musl har flyttats till stödnivÄ 2, vilket ger en bygggaranti men ingen garanti för att testsviten klaras.
Dessutom vill vi lyfta fram nyligen tillkÀnnagivna projekt och evenemang relaterade till Rust:
- Microsoft har uppgraderat Rust till ett Tier 1-sprÄk och kommer att ge fullt stöd för det i alla utvecklingsstadier inom företaget. Tidigare tillhandahölls Tier 1-stöd för C++, C# och TypeScript. Rust anvÀnds redan i över 100 Microsoft-repositories. Bland annat anvÀnds Rust-komponenter redan i produkter som Microsoft 365 och Copilot, och en dedikerad backend för Rust, rustc_codegen_utc, baserad pÄ rustc-kompilatorn, har utvecklats för MSVC-kompilatorn.
Microsoft anger att det primÀra mÄlet med att anvÀnda Rust Àr att stÀrka sÀkerhetskritisk kod. Enligt Microsoft Azures tekniska chef Àr cirka 70 % av alla sÄrbarheter i Windows orsakas av minneshanteringsproblem som kan undvikas genom att anvÀnda Rust.
- Google har tagit bort den frÄn kÀrnan. Linux Den gamla Binder IPC-implementeringen, skriven i C, har förÄldrats till förmÄn för en ny Binder IPC-drivrutin omskriven i Rust. Det bör noteras att den gamla drivrutinen under de 15 Är den existerat har ackumulerat betydande teknisk skuld och ett flertal komplikationer, vilket har hindrat buggdetektering, underhÄll och tillÀgg av nya funktioner. Binder IPC-drivrutinen i Rust har utsetts till huvuddrivrutin och presenteras inte lÀngre som en experimentell utveckling.
- Arti 2.7.0, en Rust-implementering av Tor-verktygslĂ„dan, har slĂ€ppts. NĂ€r Artis kodbas nĂ„r en nivĂ„ som helt kan ersĂ€tta C-implementeringen, avser Tor-utvecklarna att göra Arti till den primĂ€ra Tor-implementeringen och gradvis fasa ut underhĂ„llet av C-implementeringen. Den nya versionen inkluderar funktionsutveckling för relĂ€er och servrar Funktionalitet för katalogauktoritet (DA) relaterad till dokumentparsning, stöd för spegling av katalogserver och DNS-trafikbehandling. En RPC-implementering för konfigurationsĂ€ndringar och kontroller har lagts till. Flera sĂ„rbarheter har Ă„tgĂ€rdats â administratörer av Onion-tjĂ€nsten rekommenderas att snarast uppdatera sina system.
KĂ€lla: opennet.ru
