Rust (programmeertaal)

programmeertaal van Mozilla

Rust is een gecompileerde multi-paradigma-programmeertaal bedacht door Graydon Hoare en is begonnen als een project van Mozilla Research.[4] Rust is deels geïnspireerd door de programmeertalen C en C++, maar kent syntactische en semantische verschillen tegenover deze programmeertalen. Rust focust zich met name op snelheid, veiligheid, betrouwbaarheid en productiviteit. Dit wordt gerealiseerd door gebruik te maken van een krachtig typesysteem en een borrow checker. Hiermee kan Rust een hoog niveau van geheugenveiligheid garanderen zonder een garbage collector nodig te hebben.[5]

Rust
Rust
Paradigma Gecompileerd, gelijktijdig (concurrent), functioneel, imperatief, gestructureerd, generiek
Verschenen 2006
Ontworpen door Graydon Hoare
Ontwikkeld door Rust-projectontwikkelaars
Huidige versie 1.77.1[1] Bewerken op Wikidata
28 maart 2024
Typesysteem Statisch, nominaal, lineair, algebraïsch, lokaal afgeleid[2]
Implementaties Rustc[3]
Beïnvloed door Alef, C, C#, C++, Camlp4, Common Lisp, Cyclone, Erlang, Haskell, Hermes, Limbo, Napier, Napier88, Newsqueak, NIL, Ocaml, Racket, Ruby, Sather, Standard ML
Besturingssysteem Windows, OS X, Linux en FreeBSD
Licentie Dubbele licentie: MIT-licentie / Apache-licentie 2.0
Bestandsextensies .rs
Website (en) Officiële website
Portaal  Portaalicoon   Informatica

Rust beoogt moderne computersystemen efficiënter te benutten. Hiervoor maakt het onder meer gebruik van geheugenbeheer dat geheugen in een blok toewijst en daarnaast strikt toeziet op de stacktoewijzing. Hierdoor kunnen problemen zoals stackoverflows, bufferoverflows en niet-geïnitialiseerd geheugen voorkomen worden. Verder staat Rust ook geen null-pointers, dangling-pointers of data-races toe in veilige code. Als alternatief voor null maakt Rust gebruik van een datatype Option waarmee gekeken kan worden of een pointer wel of geen waarde bevat (aangeduid met respectievelijkSomeenNone). Wanneer er op laag niveau geprogrammeerd wordt kan onveilige code niet altijd vermeden worden, daarom beschikt Rust over een keyword unsafe waarbij bepaalde onderdelen die veiligheid garanderen worden uitgeschakeld.

De ontwikkeling van Servo en de Rust-compiler hebben geholpen bij het verfijnen van de taal.

In de maand februari van het jaar 2021 zijn de handelsmerken en de infrastructuur van het project overgeheveld naar The Rust Foundation.[6]

Kenmerken bewerken

Borrow-checker bewerken

Het onderdeel dat Rust zijn veiligheid biedt, is de borrow-checker. Het zorgt ervoor dat een object maar één eigenaar tegelijk kan hebben. De eigenaar kan wel toegang verlenen tot het object door middel van borrows (uitleningen), waarbij het meerdere niet-muteerbare referenties kan uitlenen, of een enkele muteerbare referentie. Dit zorgt er ook voor dat een object niet door twee verschillende threads gewijzigd kan worden.

Thread-safety bewerken

Naast het voorkomen van null-referenties door de borrow-checker, biedt Rust ook vangnetten om data-races te voorkomen. Zo implementeren bepaalde typen de Send-trait (eigenschap), om aan te tonen dat het object gestuurd kan worden tussen threads, en mogelijk ook Sync om aan te tonen dat het object gebruikt kan worden door meerdere threads tegelijk. Objecten waarvan het type deze traits niet implementeert, worden door de borrow-checker geweigerd om te sturen naar of te delen met andere threads.

Macro's bewerken

Om het gebruik van ingewikkelde procedures of herhaalde stappen te versimpelen, biedt Rust de mogelijkheid macro's aan te maken.

Functionele macro's bewerken

Functionele macro's kunnen gebruikt worden als functies en worden aangetoond met een uitroeptekensuffix. Zo biedt bijvoorbeeld de format!-macro[7] de mogelijkheid om een string te bouwen op basis van verschillende argumenten.

fn main() {
    let website = "Wikipedia";
    let info = format!("Hallo, {website}");
    // "Hallo, Wikipedia"
}

Derive-macro's bewerken

Derive-macro's worden gebruikt om automatisch bepaalde traits te implementeren. De Debug-macro[8] biedt bijvoorbeeld de mogelijkheid om eenvoudig de inhoud van een object te tonen.

Tools[9] bewerken

IDE-ondersteuning bewerken

Rust heeft eersteklas-ondersteuning voor negen IDE's:

Naast deze acht is er ook ondersteuning te vinden in andere ontwikkelomgevingen en teksteditors zoals Kate, Gedit en GNOME Builder.

Bouwen[10] bewerken

Rust heeft zijn eigen build tool genaamd Cargo. Cargo kan gebruikt worden voor het creëren, testen, beheren en bouwen van projecten en crates (packages).

Linten[11] bewerken

Rust beschikt over zijn eigen linter genaamd Clippy. Met Clippy kan statische analyse uitgevoerd worden op de code, hiermee kunnen veelvoorkomende fouten worden gedetecteerd.

Formatteren[12] bewerken

Rust beschikt over een formatter genaamd Rustfmt. Met Rustfmt kan code geformatteerd worden aan de hand van stijlrichtlijnen.

Documentatie[13] bewerken

Voor het documenteren van Rust-code kan gebruik worden gemaakt van Rustdoc.

Hello World bewerken

Hello World kan op volgende manier geprogrammeerd worden in Rust:

fn main() {
    println!("Hello world!");
}

Versiegeschiedenis bewerken

Iedere zes weken geeft het 'release team' van de Rust-gemeenschap een nieuwe versie uit. Indien nodig worden er tussentijds correctieversies uitgegeven. Daarnaast wordt elke twee tot drie jaar een versie als Editie gemarkeerd als een soort mijlpaal waarbij de functionaliteiten samen worden gebracht in een duidelijk pakket.[14] Hieronder zijn een aantal van de meest significante versies uitgelicht. De volledige versiegeschiedenis is te vinden in het RELEASES.MD bestand op de Github pagina van Rust.

  • 1.56.0 - 2021-10-21, Editie 2021[15]
  • 1.31.0 - 2018-12-06, Editie 2018[16]
  • 1.0.0 - 2015-05-15, Editie 2015[17] (eerste stabiele versie)
    • Beta - 2015-04-03[18]
    • Alpha 2 - 2015-02-20[19]
    • Alpha - 2015-01-09[20]
  • 0.1.0 - 2012-01-20, eerste versie

Zie ook bewerken

Externe links bewerken