Programvareutvikling

Hva er Rust? Fremveksten av minnesikre språk

Vi forklarer hvordan Rust fungerer og hvorfor det sprer seg raskt i systemprogramvare, med minnesikkerhet som reduserer sikkerhetshull.

Aurora YazılımRedaksjonen 6 min lesetid
Hva er Rust? Fremveksten av minnesikre språk
Hva er Rust?

Rust er et åpen kildekode-språk for systemprogrammering som er like raskt som C og C++, men som garanterer minnesikkerhet allerede ved kompilering. Kjernen i spørsmålet om hva Rust er, er eierskapsmodellen: uten søppelsamler hindrer den feil som bufferoverflyt og tilgang til frigjort minne før programmet kjører. Det blir stadig mer utbredt i operativsystemer, nettlesere og serverprogramvare.

Hva er programmeringsspråket Rust?

Programmeringsspråket Rust oppstod i et prosjekt hos Mozilla, og den første stabile versjonen kom i 2015. I dag utvikles det av et bredt fellesskap under den uavhengige Rust Foundation. Referanseadressen for offisiell dokumentasjon og installasjon er rust-lang.org.

Språkets mål er ambisiøst: å kombinere hastigheten og kontrollen i lavnivåspråk med sikkerheten i høynivåspråk. Tradisjonelt har man måttet velge mellom de to. Rust vil gi begge deler.

Rust brukes på et bredt felt, fra kommandolinjeverktøy til nettverkstjenester, fra innebygde enheter til WebAssembly-moduler som kjører i nettleseren. Det skiller seg særlig ut der sikkerhet og ytelse er kritiske samtidig.

Hvorfor er minnesikkerhet så viktig?

I språk som C og C++ er minnehåndteringen i stor grad utviklerens ansvar. Å skrive utenfor grensene til en tabell, bruke minne som allerede er frigjort eller frigjøre samme minne to ganger kan få programmet til å krasje eller la en angriper kjøre kode.

Dette problemet er ikke teoretisk. Microsoft og Chromium-teamet hos Google har offentliggjort at rundt 70 prosent av de alvorlige sikkerhetshullene i produktene deres skyldes minnesikkerhet. Derfor anbefaler mange offentlige instanser og store teknologiselskaper å velge minnesikre språk i nye prosjekter.

Språk som Java, C#, Go og Python løser dette problemet i stor grad med en søppelsamler (garbage collector). Prisen er ekstra belastning under kjøring og av og til uforutsigbare pauser. Rust gir samme sikkerhet uten søppelsamler, ved kompilering.

Hvordan fungerer eierskap og lån?

Sikkerheten i Rust bygger på tre grunnregler. Selv om de virker uvante i begynnelsen, lar de deg fange mange feil før koden kjører, når de først har satt seg.

rustEksempel på eierskap og lån
fn uzunluk(metin: &String) -> usize {
    metin.len()
}

fn main() {
    let selam = String::from("Merhaba");
    let n = uzunluk(&selam); // lånt ut, eierskapet blir hos oss
    println!("{} karakter: {}", n, selam);

    let tasindi = selam; // eierskapet ble flyttet
    // println!("{}", selam); // kompileringsfeil: selam er ikke lenger gyldig
    println!("{}", tasindi);
}

Eierskap (ownership)

Hver verdi har én eier. Når eieren går ut av omfanget, frigjøres minnet automatisk. Når verdien overføres til en annen variabel, flyttes eierskapet også, og den gamle variabelen kan ikke lenger brukes.

Lån (borrowing)

For å bruke en verdi uten å overføre eierskapet tas det en referanse. Samtidig kan det enten finnes flere skrivebeskyttede referanser eller én enkelt referanse som kan endres. Denne regelen hindrer ved kompilering samtidighetsfeil som kalles datakappløp (data race).

Levetider (lifetimes)

Kompilatoren verifiserer at dataene en referanse peker på lever lenger enn referansen. Dermed forsvinner feiltypen som kalles hengende peker (dangling pointer).

Forskjellen på Rust og C++

Rust og C++ brukes på lignende områder, og ytelsen er som regel på samme nivå. Den egentlige forskjellen er hvem som har ansvaret for sikkerheten.

KriteriumC++Rust
MinnesikkerhetAvhenger av utviklerens aktsomhetKontrolleres av kompilatoren
SøppelsamlerIngenIngen
YtelseSvært høySvært høy
SamtidighetsfeilKan oppstå under kjøringDatakappløp stoppes ved kompilering
PakkehåndteringFlere verktøyOffisielt verktøy: Cargo
LæringskurveLang og spredtBratt i starten, deretter konsekvent
Økosystemets alderFlere tiårYngre og i rask vekst

Hvor brukes Rust?

Hvordan man kjører Rust-kode i nettleseren har vi tatt opp i artikkelen om hva er WebAssembly, og hvorfor lavt minnebruk og rask oppstart er viktig i artikkelen om hva er serverless.

  • Operativsystemer: Linux-kjernen har begynt å godta drivere skrevet i Rust, og Rust brukes også i noen komponenter i Windows.
  • Nettlesere: flere komponenter i Firefox er skrevet i Rust.
  • Nettverks- og serverprogramvare: tjenester med mye trafikk, proxyservere og CDN-infrastruktur.
  • Kommandolinjeverktøy: raske verktøy for søk og for fil- og pakkehåndtering.
  • WebAssembly: moduler som kjører nesten med innebygd hastighet i nettleseren.
  • Innebygde systemer: sikker programvare på enheter med begrensede ressurser.
  • Sky og serverless: funksjoner som trenger rask oppstartstid og lavt minnebruk.

Installere Rust og første prosjekt

Rusts offisielle installasjonsverktøy er rustup. Det installerer kompilatoren, pakkebehandleren Cargo og standardbiblioteket sammen, og følger med på den nyeste stabile versjonen.

bashVerifisering og første prosjekt
rustc --version
cargo --version
cargo new merhaba
cd merhaba
cargo run

macOS og Linux

Kjør kommandoen nedenfor i terminalen og følg instruksjonene. Etter installasjonen lukker og åpner du terminalen på nytt.

bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Windows

Last ned og kjør rustup-init.exe fra installasjonssiden på rust-lang.org. Installasjonen ber deg om nødvendig å installere byggeverktøyene for Visual Studio C++, og uten dem mislykkes lenkesteget (linking).

Bør du lære Rust?

Den mest omtalte utfordringen ved Rust er læringskurven. Kompilatoren håndhever strenge regler, og de første ukene møter du ofte feilmeldinger. Den gode nyheten er at meldingene er forklarende og ofte foreslår løsningen direkte.

Vil du jobbe med systemprogrammering, ytelseskritiske tjenester, innebygd programvare eller sikkerhet, er Rust en sterk investering. Vil du utvikle nettsider eller forretningsapplikasjoner, gir det raskere resultat å begynne med språk som JavaScript, PHP eller Python. Rust kan du legge til senere for deler som krever ytelse.

Når du lærer, se på kompilatoren som en lærer i stedet for å kjempe mot den. Hver feilmelding viser deg et problem du kan møte i produksjon senere. Fellesskapets fora og den offisielle dokumentasjonen er også svært hjelpsomme for nybegynnere.

  • Den offisielle boken: The Rust Programming Language, gratis og på nett.
  • Rust by Example: korte eksempler som kan kjøres.
  • Skriv et lite CLI-verktøy: et enkelt program som leser filer og behandler tekst er den beste øvelsen.

Fremtiden for minnesikre språk

Sikre programmeringsspråk sees nå ikke bare som utviklerens preferanse, men som en del av sikkerhetspolitikken. Å velge et minnesikkert språk for nye kritiske komponenter forhindrer fra starten en stor del av svakhetene som ellers kunne oppstå.

Det betyr ikke at all C- og C++-kode skal skrives om. Det mer realistiske bildet er at nye komponenter skrives i sikre språk og fungerer sammen med eksisterende systemer. At Rust lett kan kobles til C gjør denne overgangen mulig.

For virksomheter er budskapet dette: det viktige er ikke hvilket språk programvaren du bruker er skrevet i, men hvordan sikkerhet er bygget inn i utviklingsprosessen. Hos Aurora Yazılım velger vi språk etter behov i prosjekter med bransjespesifikke programvareløsninger og nettbutikkplattform, og planlegger sikkerhet og ytelse fra starten. Hvordan hastighet måles og forbedres på nettet, har vi forklart på siden om hastighet og ytelse.

Vanlige spørsmål

01Brukes Rust i webutvikling?

Ja, det finnes webrammeverk og API-tjenester skrevet i Rust på serversiden. Økosystemet er likevel ikke like bredt som for JavaScript, PHP eller Python. Rust velges som regel for tjenester som trenger høy ytelse, eller for WebAssembly-moduler.

02Kommer Rust til å erstatte C++?

Ikke på kort sikt. Det finnes en enorm kodebase skrevet i C++, og språket utvikles videre. Men i nye prosjekter, særlig der sikkerhet er kritisk, velges Rust stadig oftere.

03Hva betyr unsafe i Rust?

Unsafe er et nøkkelord som slår av noen av kompilatorens kontroller for en bestemt kodeblokk. Det trengs i situasjoner som tilgang til maskinvare eller kobling til C-biblioteker. I godt skrevne prosjekter holdes disse blokkene små og gjennomgås nøye.

Rust setter en ny standard i systemprogramvare ved å kombinere hastighet og sikkerhet, og stopper mesteparten av minnerelaterte svakheter før koden kjører. For programvare der sikkerhet og ytelse er tenkt inn fra starten kan du se på programvareløsningene våre, ta en titt på tjenesten vår for webdesign til nettprosjektet ditt, eller ta kontakt med oss.