Mjukvaruutveckling

Vad är Rust? Minnessäkra språk på frammarsch

Vi förklarar hur Rust, som minskar säkerhetshål tack vare minnessäkerhet, fungerar och varför det snabbt sprids i systemmjukvara.

Aurora YazılımRedaktionen 6 min läsning
Vad är Rust? Minnessäkra språk på frammarsch
Vad är Rust?

Rust är ett programmeringsspråk med öppen källkod för systemutveckling som är lika snabbt som C och C++, men som garanterar minnessäkerhet redan vid kompilering. Kärnan i frågan om vad Rust är är ägandemodellen: utan skräpsamlare förhindrar den fel som minnesöverskridningar och åtkomst till frigjort minne innan programmet körs. Det blir allt vanligare i operativsystem, webbläsare och serverprogramvara.

Vad är programmeringsspråket Rust?

Programmeringsspråket Rust föddes ur ett projekt inom Mozilla och den första stabila versionen släpptes 2015. I dag utvecklas det av en bred community under den oberoende Rust Foundation. Referensadressen för officiell dokumentation och installation är rust-lang.org.

Språkets mål är ambitiöst: att kombinera lågnivåspråkens hastighet och kontroll med högnivåspråkens säkerhet. Traditionellt har man fått välja mellan de två egenskaperna; Rust vill erbjuda båda.

Rust används inom ett brett område, från kommandoradsverktyg till nätverkstjänster, inbyggda enheter och WebAssembly-moduler som körs i webbläsaren. Det sticker ut framför allt där både säkerhet och prestanda är kritiska.

Varför är minnessäkerhet så viktigt?

I språk som C och C++ ligger minneshanteringen till stor del hos utvecklaren. Att skriva utanför en arrays gräns, återanvända frigjort minne eller frigöra samma minne två gånger kan få programmet att krascha eller låta en angripare köra kod.

Det här problemet är inte teoretiskt. Microsoft och Googles Chromium-team har offentligt berättat att ungefär 70 procent av de allvarliga säkerhetshålen i deras egna produkter berodde på minnessäkerhet. Därför rekommenderar många myndigheter och stora teknikföretag att minnessäkra språk väljs i nya projekt.

Språk som Java, C#, Go och Python löser problemet till stor del med en skräpsamlare (garbage collector). Priset är extra belastning under körning och ibland oförutsägbara pauser. Rust ger samma säkerhet utan skräpsamlare, redan vid kompilering.

Så fungerar ägande och lån

Rusts säkerhet vilar på tre grundregler. Även om de känns ovana i början gör de, när de väl sitter, att du fångar många fel innan koden körs.

rustExempel på ägande och lån
fn uzunluk(metin: &String) -> usize {
    metin.len()
}

fn main() {
    let selam = String::from("Merhaba");
    let n = uzunluk(&selam); // utlånad, ägandet ligger kvar hos oss
    println!("{} karakter: {}", n, selam);

    let tasindi = selam; // ägandet flyttades
    // println!("{}", selam); // kompileringsfel: selam är inte längre giltig
    println!("{}", tasindi);
}

Ägande (ownership)

Varje värde har en enda ägare. När ägaren går ut ur sitt scope frigörs minnet automatiskt. När värdet flyttas till en annan variabel flyttas ägandet också; den gamla variabeln kan inte längre användas.

Lån (borrowing)

För att använda ett värde utan att ta över ägandet tar man en referens. Samtidigt kan det antingen finnas flera skrivskyddade referenser eller en enda föränderlig referens. Den regeln förhindrar vid kompilering samtidighetsfel som kallas dataracer (data race).

Livstider (lifetimes)

Kompilatorn verifierar att datan som en referens pekar på lever längre än referensen. På så sätt försvinner felkategorin hängande pekare (dangling pointer).

Skillnaden mellan Rust och C++

Rust och C++ används inom liknande områden och har oftast samma prestandanivå. Den verkliga skillnaden är vem som bär ansvaret för säkerheten.

KriteriumC++Rust
MinnessäkerhetBeror på utvecklarens noggrannhetKontrolleras av kompilatorn
SkräpsamlareIngaInga
PrestandaMycket högMycket hög
SamtidighetsfelKan dyka upp under körningDataracer stoppas vid kompilering
PakethanteringFlera verktygOfficiellt verktyg: Cargo
InlärningskurvaLång och spriddBrant i början, sedan jämn
Ekosystemets ålderFlera decennierYngre, växer snabbt

Var används Rust?

Hur man kör Rust-kod i webbläsaren har vi gått igenom i artikeln Vad är WebAssembly? och varför lågt minnesbruk och snabb start är viktigt i artikeln Vad är serverless?.

  • Operativsystem: Linuxkärnan har börjat ta emot drivrutiner skrivna i Rust; Rust används också i vissa delar av Windows.
  • Webbläsare: flera komponenter i Firefox är skrivna i Rust.
  • Nätverks- och serverprogramvara: tjänster med hög trafik, proxyservrar och CDN-infrastruktur.
  • Kommandoradsverktyg: snabb sökning samt verktyg för filer och pakethantering.
  • WebAssembly: moduler som körs nära inhemsk hastighet i webbläsaren.
  • Inbyggda system: säker mjukvara på enheter med begränsade resurser.
  • Moln och serverlös körning: funktioner som kräver snabb starttid och lågt minnesbruk.

Installera Rust och första projektet

Rusts officiella installationsverktyg är rustup; det installerar kompilatorn, pakethanteraren Cargo och standardbiblioteket tillsammans och följer den aktuella stabila versionen.

bashVerifiering och första projektet
rustc --version
cargo --version
cargo new merhaba
cd merhaba
cargo run

macOS och Linux

Kör kommandot nedan i terminalen och följ anvisningarna. Stäng och öppna terminalen efter installationen.

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

Windows

Ladda ner och kör filen rustup-init.exe från installationssidan på rust-lang.org. Vid behov ber installationen dig installera byggverktygen för Visual Studio C++; utan de verktygen misslyckas länkningssteget (linking).

Ska du lära dig Rust?

Det som oftast diskuteras kring Rust är inlärningskurvan. Kompilatorn tillämpar strikta regler och de första veckorna möter du ofta felmeddelanden. Den goda nyheten är att meddelandena är förklarande och ofta föreslår lösningen direkt.

Vill du arbeta med systemprogrammering, prestandakritiska tjänster, inbyggd mjukvara eller säkerhet är Rust en stark investering. Vill du utveckla webbplatser eller affärsapplikationer ger det snabbare resultat att börja med språk som JavaScript, PHP eller Python; Rust kan du lägga till senare för delar som kräver prestanda.

När du lär dig, se kompilatorn som en lärare i stället för att slåss mot den. Varje felmeddelande visar i förväg ett problem som du annars kunde möta i produktion. Communityns forum och den officiella dokumentationen är också mycket hjälpsamma mot nybörjare.

  • Officiell bok: The Rust Programming Language, gratis och på nätet.
  • Rust by Example: korta exempel som går att köra.
  • Skriv ett litet CLI-verktyg: ett enkelt program som läser filer och bearbetar text är den bästa övningen.

Framtiden för minnessäkra språk

Säkra programmeringsspråk ses numera inte bara som utvecklarens val utan som en del av säkerhetspolicyn. Att välja ett minnessäkert språk för nyskrivna kritiska komponenter förebygger redan från början en stor del av de sårbarheter som annars kan uppstå.

Det betyder inte att all C- och C++-kod ska skrivas om. Den mer realistiska bilden är att nya komponenter skrivs i säkra språk och samarbetar med befintliga system. Att Rust enkelt kan kopplas till C gör den övergången möjlig.

För företag är budskapet detta: viktigare än vilket språk programvaran du använder är skriven i är hur säkerheten byggts in i utvecklingsprocessen. På Aurora Yazılım väljer vi språk efter behov i projekt för branschanpassade mjukvarulösningar och e-handelsplattformar och planerar säkerhet och prestanda från början. Hur hastighet mäts och förbättras på webben har vi beskrivit på sidan om hastighet och prestanda.

Vanliga frågor

01Används Rust för webbutveckling?

Ja, det finns webbramverk och API-tjänster skrivna i Rust på serversidan. Men ekosystemet är inte lika brett som för JavaScript, PHP eller Python. Rust väljs oftast för tjänster som kräver hög prestanda eller för WebAssembly-moduler.

02Kommer Rust att ersätta C++?

Inte på kort sikt; det finns en enorm kodbas skriven i C++ och språket fortsätter att utvecklas. Men i nya projekt, särskilt inom områden där säkerhet är kritiskt, väljs Rust allt oftare.

03Vad betyder unsafe i Rust?

Unsafe är ett nyckelord som stänger av en del av kompilatorns kontroller för ett visst kodblock. Det behövs i fall som åtkomst till hårdvara eller koppling till C-bibliotek. I välskrivna projekt hålls de blocken små och granskas noggrant.

Rust förenar hastighet och säkerhet och skapar en ny standard inom systemmjukvara; det stoppar största delen av minnesrelaterade sårbarheter redan innan koden körs. För mjukvara där säkerhet och prestanda tänkts igenom från början kan du se våra mjukvarulösningar, titta på vår tjänst för webbdesign för ditt webbprojekt eller kontakta oss.