Utviklere raser etter at ny Rust-versjon skaper store problemer

Endringer i Rust 1.80.0 har skapt problemer for flere Rust-prosjekter. Noen utviklere krever at endringene rulles tilbake.

Versjon 1.80.0 av Rust har skapt problemer for en del Rust-prosjekter. 📸: NTB / Shutterstock
Versjon 1.80.0 av Rust har skapt problemer for en del Rust-prosjekter. 📸: NTB / Shutterstock Vis mer

I slutten av juli ble versjon 1.80.0 av programmeringsspråket Rust lansert. Nå viser det seg at oppdateringen har skapt problemer for flere Rust-prosjekter, melder DevClass.

– Dette er under nivået av stabilitet og pålitelighet Rust bør ha, skriver utvikleren "kornel" oppgitt.

Han skriver at Rust 1.80.0 "brekker" nesten alle versjoner av den populære time-craten. Dette er en crate, en form for pakke, som brukes i forbindelse med håndtering av tid og datoer.

Dette har igjen skapt problemer for andre prosjekter, blant annet NixOS, et populært verktøy for pakkehåndtering og systemkonfigurasjon.

– Det å fikse dette vil kreve nye versjoner av hver av de berørte pakkene, skriver en annen utvikler.

Problemet er at mange pakker som NixOS avhenger av ikke blir aktivt vedlikeholdt.

Type-trøbbel

Kort fortalt skyldes problemene at det er lagt til en ny impl (implementering) av FromIterator for typen Box<str>.

  • Dette har igjen ført til problemer for Rust-kode som bruker type-inferens for å utlede typen til en variabel, ved å se på hvilken verdi som er tilegnet variabelen.
  • I Rust er slik type-inferens avhengig av at det finnes bare én implementasjon som matcher, så når man i versjon 1.80.0 la til ytterligere én impl, kan ikke lenger Rust-kompilatoren utlede typen.
  • Dermed må utviklere spesifikt definere typen, i stedet for å basere seg på typeinferens.

Feilen ble først oppdaget i mai, og da Rust 1.80.0 kom for noen uker siden fikk mange prosjekter med avhengigheter som bruker gamle versjoner av time-craten byggefeil.

– Ikke godt håndtert

Utvikleren "kornel" mener at saken har blitt dårlig håndtert av Rust.

Rust bruker SemVer for versjonsnummerering, og typeinferens regnes ifølge kornel ikke som en "breaking change" – altså en endring som skal ha en oppdatering av "major"-versjonsnummeret (i dette tilfellet til 2.x.x).

Dette er imidlertid en dårlig unnskyldning for å lansere en endring som får store konsekvenser som 1.80.0, mener kornel.

– Selv 1.80 "release notes" sa ikke et ord om inkompatibilitet med en av de mest brukte Rust-cratene, skriver han.

Mer enn 5000 crates skal være berørt, ifølge utvikleren. Noen utviklere krever at Rust ruller tilbake endringene.

Rust-teamet på sin side har imidlertid diskutert saken i et møte, og mener de ikke burde ha gjort noe annerledes.

– Vi er enige om at det ikke er noe å endre på Rust sin side. De som har repoer med gamle versjoner av time i en lockfile, er nødt til å oppdatere dette, skriver David Tolnay.