[go: up one dir, main page]
More Web Proxy on the site http://driver.im/Spring til indhold

Rust (programmeringssprog)

Fra Wikipedia, den frie encyklopædi
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]

Ifølge USAs CISA-chef Jen Easterly er dårlig softwarekvalitet skyld i verdens cybersikkerhedsproblemer.[3][4] CISA anbefaler at softwareudviklere skriver deres computerprogrammer i hukommelsessikre programmeringssprog som fx Rust, Python, C#, Go, Swift eller Java - især Rust fremhæves som et godt hukommelsessikkert programmeringssprog.[5][6] USAs DARPA foreslår at konvertere C-kode til Rust-kode via maskinlæring. Projektet kaldes TRanslating All C TO Rust - kort TRACTOR.[7]

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" [8].

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

Rust blev officielt sponsoreret af Mozilla i 2009.[9] 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 [8]. I løbet af de følgende 10 år hyrede Mozilla mere end et dusin ingeniører til at arbejde fuldtid på Rust [8].

I 2015 blev den første stabile version af Rust udgivet[10], 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 [11]. 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 [12] og derved gjorde systemet 10 gange hurtigere [8]. 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 [13].

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 [14]. 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 [14]. Faktisk har Rust de sidste 7 år blevet kåret til at være det mest beundrede programmeringssprog ifølge samme undersøgelse [8].

Sikkerhedsforanstaltninger

[redigér | rediger kildetekst]

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 | rediger kildetekst]

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.

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
    // Alternativt kan man bruge '1..=10' for at inkludere slutværdien.
    let random_number = rng.gen_range(1..11);

    // Returnerer det tilfældige tal.
    return random_number;
}
  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. ^ 2024-09-20, version2.dk: USA’s cyberchef: Dårlige software-udviklere er den største trussel mod sikkerheden. CISA-chefen Jen Easterly skoser teknologileverandører for at levere produkter med indbyggede sikkerhedsproblemer, der åbner dørene for cyberangreb, backup Citat: "...»Vi har ikke et cybersikkerhedsproblem – vi har et softwarekvalitetsproblem. Vi har ikke brug for flere sikkerhedsprodukter – vi har brug for mere sikre produkter,« sagde chefen for den amerikanske cybersikkerhedsmyndighed CISA (Cybersecurity and Infrastructure Security Agency) Jen Easterly på en konference onsdag ifølge The Register. »Sandheden er: Teknologileverandører er de personer, der bygger problemer« ind i deres produkter, som derefter »åbner dørene for skurke, så de kan angribe deres ofre.«..."
  4. ^ 2024-09-20, theregister.com: CISA boss: Makers of insecure software are the real cyber villains. Write better code, urges Jen Easterly. And while you're at it, give crime gangs horrible names like 'Evil Ferret', backup
  5. ^ 28 Jun 2024, theregister.com: CISA looked at C/C++ projects and found a lot of C/C++ code. Wanna redo any of it in Rust? So, so many lines of memory-unsafe routines in crucial open source, and unsafe dependencies, backup Citat: "...Memory-safe languages, like C#, Go, Java, Python, Rust, and Swift, handle memory management for the developer, reducing the opportunity to make memory errors...The 2015 stable release of Rust, a language with strong memory-safety guarantees, gave tech firms a non-aligned systems language they could use to avoid the problems with memory-unsafe code. The competitive implications of adopting languages with strong corporate associations, like C# (Microsoft), Go (Google), Swift (Apple), or Java (Oracle) may have helped make Rust more appealing. But it took a few years for Rust to mature and catch on..."
  6. ^ June 26, 2024, cisa.gov: Exploring Memory Safety in Critical Open Source Projects, backup Citat: "...We encourage others to build on this analysis to further expand our collective understanding of memory-unsafety risk in OSS, evaluate approaches—such as targeted rewrites of critical components in memory-safe languages—to reducing this risk, and to continue efforts to drive risk-reducing action by software manufacturers. For those considering further investment in memory safe programming practices, we recommend two references: The Case for Memory Safe Roadmaps and the December 2023 report on memory safety by the Technical Advisory Council of CISA’s Cybersecurity Advisory Committee.37..."
  7. ^ 3 Aug 2024, theregister.com: DARPA suggests turning old C code automatically into Rust – using AI, of course. Who wants to make a TRACTOR pull request?, backup Citat: "...The term stands for TRanslating All C TO Rust. It's a DARPA project that aims to develop machine-learning tools that can automate the conversion of legacy C code into Rust. The reason to do so is memory safety. Memory safety bugs, such buffer overflows, account for the majority of major vulnerabilities in large codebases. And DARPA's hope is that AI models can help with the programming language translation, in order to make software more secure..."I think all languages are about trade-offs, but certainly at the kernel-level it makes sense to move part of the code to Rust," he said..."
  8. ^ a b c d e Thompson, C. (2023, 14. februar). MIT Technology Review.
  9. ^ Cimpanu, C. (2017, 5. februar). Bleeping Computer.
  10. ^ The Rust Core Team. (2015, 15. maj). Announcing Rust 1.0. Rust Blog.
  11. ^ Jayakar, S. (2020, 9. marts). Rewriting the heart of our sync engine. Dropbox Tech Blog.
  12. ^ Howarth, J. (2020, 4. februar). Why Discord is switching from Go to Rust. Discord Blog.
  13. ^ Taft, D. K. (2019, 24. oktober). AWS gets behind Rust programming language. TheServerSide.com.
  14. ^ a b Stack Overflow - 2023 Developer Survey.
Spire
Denne artikel om sprog er en spire som bør udbygges. Du er velkommen til at hjælpe Wikipedia ved at udvide den.