Rust (programmeringssprog)

programmeringssprog
For alternative betydninger, se Rust (flertydig). (Se også artikler, som begynder med Rust)

Rust er et multi-paradigme programmeringssprog skabt af Graydon Hoare, der er omhyggeligt designet til at levere høj ydeevne og it-sikkerhed.

Sproget er særligt kendt for sin evne til at håndtere samtidighed på en sikker måde, hvilket minimerer risikoen for kørselsfejl. Rust svarer syntaktisk til C og C++, men kan garantere hukommelsessikkerhed ved at bruge en lånekontrol til at validere referencer. Man kan dog komme uden om dette ved f.eks. at bruge et såkaldt 'unsafe' keyword, hvilket giver mere fleksibilitet, men også øger programmørens ansvar for korrekt hukommelsesstyring, da det tillader kode, der potentielt kan bryde hukommelsessikkerheden [1].

Ifølge Google-udviklere er Rust bedre end C++ og Go, da udviklerne bliver dobbelt så effektive.[2]

Historie redigér

I 2006 besluttede Graydon Hoare, en 29-årig computerprogrammør, der arbejdede for Mozilla, at designe et nyt programmeringssprog. Han blev inspireret af en frustrerende oplevelse med en elevator, der konstant gik i stykker på grund af softwarefejl. Hoare vidste, at mange af disse fejl skyldtes problemer med, hvordan et program bruger hukommelse. Han besluttede sig derfor at skabe et sprog, der kunne skrive hurtig kode uden hukommelsesbugs. Rust har fået sit navn efter en gruppe af bemærkelsesværdigt hårdføre svampe, Rustsvampe, som ifølge Hoare er "over-engineered for survival" [3].

Over et halvandet årti senere er Rust blevet et af de mest populære programmeringssprog.

Rust blev officielt sponsoreret af Mozilla i 2009.[4] Sproget ville være open source, og kun de mennesker, der bidrog til dets udvikling, ville have ansvar for det. Mozilla var dog parat til at kickstarte det ved at finansiere projektet [3]. I løbet af de følgende 10 år hyrede Mozilla mere end et dusin ingeniører til at arbejde fuldtid på Rust [3].

I 2015 blev den første stabile version af Rust udgivet[5], og det blev hurtigt populært blandt store virksomheder. I 2020 afslørede Dropbox en ny version af deres "sync engine", altså dét som synkroniserer filer i skyen, der var omskrevet til Rust [6]. I samme år omskrev Discord deres "Read States" service, en kritisk service der holder styr på, hvilke kanaler og beskeder brugere har læst, til Rust, hvilket resulterede i en markant forbedring [7] og derved gjorde systemet 10 gange hurtigere [3]. Amazon Web Services, som leverer cloud computing-platforme og API'er efter behov, har også fundet, at Rust kan hjælpe dem med at skrive sikrere, hurtigere kode [8].

I Stack Overflows udviklerundersøgelse fra 2023, som de afholder hvert år, er Rust blevet kåret som det mest beundrede programmeringssprog, hvor over 80% af de udviklere, der har anvendt sproget, har udtrykt et ønske om at fortsætte med det i det kommende år [9]. Dette står i skarp kontrast til det mindst attraktive sprog, MATLAB, hvor under 20% af de udviklere, der har brugt det, ønsker at fortsætte med det i det følgende år [9]. Faktisk har Rust de sidste 7 år blevet kåret til at være det mest beundrede programmeringssprog ifølge samme undersøgelse [3].

Sikkerhedsforanstaltninger redigér

I Rust beregner compileren, hvornår en variabel ikke længere er tilgængelig, og når det sker, indsætter compileren kode til frigivelse af variablens hukommelse. Variabler er som udgangspunkt uforanderlige (immutable), hvilket betyder, at deres værdi ikke kan ændres, når de først er blevet tildelt. Hvis en variabel skal kunne ændres, kan den defineres som foranderlig (mutable) ved at bruge 'mut' nøgleordet foran variabelnavnet.

Når en funktion modtager en variabel som parameter, overtager den som udgangspunkt ejerskabet, medmindre parameteren er en reference. Ved at definere parameteren som en reference, 'låner' funktionen variablen uden at overtage ejerskabet.

En reference giver som udgangspunkt kun læseadgang, men det er muligt at definere foranderlige (mutable) referencer, der tillader opdatering. Rust tillader kun én foranderlig reference til en bestemt data i en bestemt rækkevidde, hvilket hjælper med at forhindre 'data race' betingelser. En 'data race' opstår, når to eller flere tråde i en multithreaded applikation samtidigt forsøger at læse fra og skrive til den samme hukommelsesplads uden passende synkronisering. Desuden tillader Rust flere uforanderlige (immutable) referencer, men ikke en mutable reference samtidig med nogen immutable referencer. Dette er også en del af Rusts regler for "aliasing" og "mutability", som sikrer mod fejl, hvor data ændres eller slettes under læsning.

Programstruktur redigér

Rust-programmer er typisk struktureret i mange funktioner, der kalder hinanden. Dette hjælper med at holde kode organiseret og genanvendelig.

Rust understøtter også moduler, som er en måde at gruppere relaterede definitioner, såsom funktioner, strukturer (datastrukturer, der kan indeholde forskellige typer data) og træk (en måde at definere fælles adfærd på), sammen. Som standard er alle definitioner i et modul private, hvilket betyder, at de kun kan tilgås inden for det modul, de er defineret i. Hvis en definition skal være tilgængelig uden for det modul, det er defineret i, kan det gøres offentligt ved hjælp af nøgleordet 'pub'.

I større Rust-programmer kan moduler være indlejret i hinanden for at skabe en hierarkisk struktur. Dette kan hjælpe med at organisere kode i logiske grupper. Desuden kan moduler flyttes ud i deres egne filer for at gøre koden mere overskuelig og nemmere at vedligeholde.

Her er et eksempel på, hvordan moduler kan bruges i Rust:

// Definerer et modul med navnet 'greetings'
mod greetings {
    // Gør 'hello' funktionen offentlig med 'pub' nøgleordet
    pub fn hello() {
        println!("Hello, world!");
    }

    // 'goodbye' funktionen er privat og kan kun tilgås inden for 'greetings' modulet
    fn goodbye() {
        println!("Goodbye, world!");
    }
}

// Hovedfunktionen
fn main() {
    // Kalder den offentlige 'hello' funktion fra 'greetings' modulet
    greetings::hello();
}

I dette eksempel er 'hello'-funktionen defineret i 'greetings'-modulet og gjort offentlig, så den kan kaldes fra 'main'-funktionen. Derimod er 'goodbye'-funktionen privat og kan kun kaldes inden for 'greetings'-modulet.

Eksempel redigér

Her er et simpelt eksempel på et CLI script skrevet i Rust, hvor der genereres et tilfældigt tal ved hjælp af rand-programbiblioteket.

// Her importeres 'rand' biblioteket, som muliggør generering af tilfældige tal.
use rand::Rng;

// Hovedfunktionen, hvor programmet starter.
fn main() {
    // Kalder 'generate_random_number' funktionen og gemmer resultatet i et uforanderligt variabel.
    let random_number = generate_random_number();

    // Her skrives en linje til konsollen.
    println!("Det tilfældige tal er: {}", random_number);
}

// Funktion der genererer et tilfældigt tal mellem 1 og 10.
fn generate_random_number() -> i32 {
    // Opretter en ny tilfældig nummergenerator.
    let mut rng = rand::thread_rng();

    // Genererer et tilfældigt tal mellem 1 og 10
    // Der skrives ikke '1..10', men i stedet '1..11', fordi den øvre grænse, 11, ikke er inkluderet
    let random_number = rng.gen_range(1..11);

    // Returnerer det tilfældige tal.
    return random_number;
}

Se også redigér

Referencer redigér

  1. ^ The Rust Programming Language - Unsafe Rust
  2. ^ 31 Mar 2024, theregister.com: Rust developers at Google are twice as productive as C++ teams. Code shines up nicely in production, says Chocolate Factory's Bergstrom, backup Citat: "..."When we've rewritten systems from Go into Rust, we've found that it takes about the same size team about the same amount of time to build it," said Bergstrom. "That is, there's no loss in productivity when moving from Go to Rust. And the interesting thing is we do see some benefits from it. "So we see reduced memory usage in the services that we've moved from Go ...and we see a decreased defect rate over time in those services that have been rewritten in Rust – so increasing correctness."..."In every case we've seen a decrease by more than 2x in the amount of effort required to both build the services in Rust as well as maintain and update those services written in Rust," he said...A bit more than half of his developers say that Rust is easier to review, according to Bergstrom..."
  3. ^ a b c d e Thompson, C. (2023, 14. februar). MIT Technology Review.
  4. ^ Cimpanu, C. (2017, 5. februar). Bleeping Computer.
  5. ^ The Rust Core Team. (2015, 15. maj). Announcing Rust 1.0. Rust Blog.
  6. ^ Jayakar, S. (2020, 9. marts). Rewriting the heart of our sync engine. Dropbox Tech Blog.
  7. ^ Howarth, J. (2020, 4. februar). Why Discord is switching from Go to Rust. Discord Blog.
  8. ^ Taft, D. K. (2019, 24. oktober). AWS gets behind Rust programming language. TheServerSide.com.
  9. ^ a b Stack Overflow - 2023 Developer Survey.

Links redigér

 Spire
Denne artikel om sprog er en spire som bør udbygges. Du er velkommen til at hjælpe Wikipedia ved at udvide den.