mjukvara

Rust 1.100 lanseras med beroendekylning och never-typ

Den nya versionen av Rust stabiliserar dependency cooldowns i Cargo för att skydda mot skadliga paket, samt slutför arbetet med never-typen och anpassade minnesallokatorer.

Kugghjul av metall som griper in i varandra.
AI-genererad illustration

Rust 1.100 har lanserats med ett tydligt fokus på att stärka leveranskedjans säkerhet samt att slutföra flera långvariga språkutvecklingsprojekt källa. Utöver säkerhetsförbättringarna stabiliseras den så kallade never-typen, vilket har varit ett återkommande mål under språkets livstid, samt gränssnittet för anpassade minnesallokatorer.

Vad som hände

Den mest omtalade säkerhetsfunktionen i uppdateringen är stabiliseringen av "dependency cooldowns", även kallat min-publish-age. Enligt Rust-teamet möjliggör detta för utvecklare att konfigurera en minimiålder för när ett paket får användas, vilket ger tid för gemenskapen eller automatiserade verktyg att identifiera potentiellt skadliga versioner innan de sprids vidare källa.

Funktionen är opt-in och kräver konfiguration i filen .cargo/config.toml. Ett exempel enligt dokumentationen är att sätta global-min-publish-age till tre dagar, varvid Cargo då ignorerar versioner som publicerats senare än så. Om en äldre version ändå behövs kan utvecklaren överskrida gränsen för specifika paket via miljövariabler eller kommandoradsflaggor. Rust-teamet poängterar dock att funktionen inte är ett fullständigt skydd mot leveranskedjeattacker och att granskning av beroenden fortfarande krävs.

Samtidigt slutförs arbetet med never-typen, betecknad ! i koden. Efter tio år och fem misslyckade försök att stabilisera funktionen är den nu en del av standardbiblioteket källa. Typen representerar beräkningar som aldrig avslutas, exempelvis vid return eller exit. Detta möjliggör mer exakt typkontroll, till exempel att ett gren i en match-sats kan returnera inget värde eftersom koden där efter är oåtkomlig. För att underlätta övergången ändras Infallible till en alias för never-typen, vilket innebär att äldre API som använt Infallible nu kan använda !. Denna ändring medför vissa brytande förändringar i kodsyntax för äldre editioner (2015–2021), där fallback-värdet ändras från () till !.

Fler funktioner och analys

Uppdateringen stabiliserar även kärnan i allocator_api, vilket låter biblioteksskrivare definiera anpassade minnesallokatorer för standardtyper som Vec och Box via det nya Allocator-gränssnittet. Det ses som grundstenen för framtida utökningar av API-ytan för dessa typer.

Vidare introduceras DropGuard, en ny hjälpstruktur i core::mem. Enligt Rust-teamet underlättar detta implementering av transaktionsliknande "allt-eller-inget"-logik utan att behöva skapa egna typer som implementerar Drop källa.

Forskare vid Microsoft FORGE Lab har parallellt pekat på att minnessäkerhetsbrister fortfarande kan förekomma i Rusts standardbibliotek, särskilt där "safe" kod interagerar med felaktiga antaganden i unsafe-block research. Detta understryker vikten av att även stabila bibliotek granskas noggrant, trots språkets inbyggda säkerhetsmekanismer.

analys: vad det betyder för utvecklare

Införandet av dependency cooldowns markerar en institutionalisering av försiktighet kring paketberoenden. Genom att göra funktionen tillgänglig direkt i Cargo underlättas det för organisationer att sätta upp enhetliga säkerhetsstandarder utan externa verktyg. Samtidigt visar stabiliseringen av never-typen och allokator-API:t att Rust-teamet prioriterar språkets teoretiska grundvalar och lågnivåkontroll, vilket är centralt för dess användningsområde inom systemprogrammering.

De brytande ändringarna kring never-typens fallback kan kräva justeringar i äldre projekt, men Rust-teamet uppger att påverkan bör vara begränsad och att korrigeringar redan har lämnats in till drabbade offentliga crate. För nya projekt innebär uppdateringen främst möjligheter till renare kodstruktur genom DropGuard och mer explicit typsäkerhet.

Sidorna som redaktionen läste när artikeln skrevs, primärkällor först.

  1. Rust 1.100blog.rust-lang.org · primärkälla
  2. FORGE Lab uses agentic tools to identify memory safety issues in Rust | Microsoft Security BlogMicrosoft · primärkälla
  3. Rust 1.100 Will Add Dependency Cooldowns to Cargosocket.dev
  4. Rust Changelogsreleases.rs

Inga kommentarer ännu.

Kommentarer bedöms först av en lokal AI-modell; tveksamma fall väntar på en människa. Så hanterar vi uppgifterna