4min

Rust is al jaren populairder aan het worden. Dit jaar koos Microsoft ervoor om een deel van de Windows-kernel te herschrijven in de Rust-programmeertaal. Recent bleek dat ook het ontwikkelen van drivers voor het besturingssysteem op termijn met Rust mogelijk moet worden. Ook Amazon, Dropbox en Cloudflare maken er inmiddels uitvoerig gebruik van. Wat is het geheim achter de opmars van deze taal?

Rust zag in 2006 het levenslicht als persoonlijk project van Mozilla-ontwikkelaar Graydon Hoare. Het was ontworpen om het voor ontwikkelaars zo eenvoudig mogelijk te maken om te coderen, waarbij geheugenbeheer centraal stond. Vanaf 2009 ontving Rust officiële ondersteuning van Mozilla en werd het open-source gemaakt. Nadat Mozilla een kwart van haar medewerkers ontsloeg in augustus 2020, leek de toekomst van Rust in gevaar. In februari 2021 richtten AWS, Huawei, Google, Microsoft en Mozilla echter de Rust Foundation op die het voortbestaan van de taal zou moeten garanderen. Hoewel deze organisatie meerdere keren onder vuur is gekomen door verschillende incidenten, blijft de programmeertaal die het onderhoudt nog altijd aan populariteit winnen.

Sinds jaar en dag draait Windows voornamelijk op C, dat ontwikkeld werd in de jaren ’70. Het staat bekend als een ‘minimalistische’ taal die veel controle geeft aan de ontwikkelaar, maar ook veel verantwoordelijkheid. Het kan een hels karwei zijn om goed om te gaan met het beschikbare systeemgeheugen. Programma’s die C en C++ gebruiken (of veel andere talen), kunnen door incorrecte memory management crashen of cyber-incidenten toestaan. Geheugen dat namelijk niet opnieuw toegewezen wordt, kan door een hacker worden ingezet om code injection uit te voeren. Bugs veroorzaakt door fouten in het geheugenbeheer zouden voor 70 procent van alle kwetsbaarheden in Microsoft-producten zorgen.

Tip: Microsoft brengt meer Rust-features uit voor Windows-kernel

Memory-safe

Ontwikkelaars omschrijven Rust als een ‘stabiele’ en ‘veilige’ taal in vergelijking met bijvoorbeeld C en C++. Dit komt omdat het geheugenbeheer een stuk overzichtelijker is. In de stacktoewijzing houdt het nauwkeurig bij welk stukje geheugen het vrijgeeft, naast dat het middels een borrow-checker garandeert dat elk object maar één eigenaar heeft. Zo voorkomt het ontwerp van Rust dat een ontwikkelaar continu geheugen in de gaten moet houden. Ook is het niet afhankelijk van “garbage collectors”, een methode om geheugen op te schonen die onder meer Java, JavaScript en Python toepassen. Dit zet extra druk op de hardware en is daardoor moeilijker te optimaliseren. Rust blijkt onder de streep in praktische zin minstens zo efficiënt te zijn als C en C++.

In praktische zin betekent dit dat Rust betrouwbare code produceert voor apparatuur die moeilijk of niet te updaten is. Denk aan IoT-devices of OT-infrastructuur, waarbij een functie veelal langdurig uitgevoerd moet worden zonder interrupties.

Praktisch, parallel

Omdat Rust efficiënt omgaat met geheugen, is de taal uitermate geschikt voor grote hoeveelheden data en taken die veel rekenkracht opeisen. Software-engineer bij GitHub Jason Ordendorff stelt dat Rust snel en betrouwbaar is. “Het laat me programma’s voor 16 cores schrijven die leesbaar, onderhoudbaar en crash-vrij zijn.” Toevallig past dit bij de richting waar computer-hardware naartoe beweegt: omdat de Wet van Moore niet meer lijkt te gelden voor x86-chips, kiezen AMD en Intel voor steeds meer cores en threads. Dit maakt parallelisatie steeds belangrijker, oftewel het gelijktijdig verwerken van verschillende berekeningen. Inmiddels zijn we afgestapt van voortdurende verbeteringen in de Gigahertz-getallen van CPU’s; multi-core workloads hebben de grootste prestatiewinst.

Daarnaast zijn veel applicaties steeds meer afhankelijk van asynchronous programming om snel aan te voelen voor de eindgebruiker. Dit houdt in dat een programma vlot en dynamisch aanvoelt terwijl het op de achtergrond nog een zwaardere taak kan verwerken. Andere programmeertalen kunnen hier eveneens voor geschikt zijn, hoewel dat niet altijd vlekkeloos verloopt. Wederom is het geheugenbeheer dat Rust onderscheidt. Terwijl JavaScript bijvoorbeeld vatbaar is voor ‘data races’, waarbij meerdere taken een gedeelde resource delen en onvoorspelbare eindresultaten oplevert. De veiligheid van Rust op dit gebied wordt omschreven als “life-saving“.

Als klap op de vuurpijl is Rust volgens menig programmeur eenvoudig te analyseren. Code review is een essentieel component voor het ontwikkelen van veilige software, dus deze kwaliteit van Rust is goud waard. Daarnaast zijn de foutmeldingen van Rust vaak informatief en behulpzaam.

Kritiek en problemen

Echter is niet alles dat over Rust gezegd wordt positief. Zo zou de syntax onnodig complex zijn en een stevige leercurve kennen. Toch is niet iedereen het erover eens dat de daadwerkelijke tijd die het kost om Rust te leren, significant afwijkt van andere talen. Onderzoek van Google laat zien dat slechts 16,6 procent van de ondervraagde ontwikkelaars meer dan 4 maanden tijd nodig heeft om vaardig te worden met de taal.

Iets waar zowat iedereen het over eens lijkt te zijn, is dat de compilatietijd van Rust wel erg lang is. Iets meer dan 40 procent uit het eerder genoemde Google-onderzoek acht deze snelheid ‘acceptabel’. Daarnaast zou Rust moeilijk te integreren zijn met andere programmeertalen.

Onderzoek van Usenix gebruikte Rust als case-study om de voor- en nadelen van een veilige programmeertaal te analyseren. Een enquête daaruit liet zien dat er veel positiefs te melden was, maar dat de kwaliteit van de debugging-tools de meningen verdeelde.

Een andere kwestie blijkt moeilijker op te lossen: die van standaardisering. Als open-source project evolueert Rust continu. Echter zijn er nog geen standaarden om te voldoen aan bepaalde industrie-eisen.

Toekomstbeeld

Kortom: Rust biedt veel voordelen die passen bij de moderne IT-wereld. De nadruk op veiligheid en stabiliteit ten opzichte van de programmeertalen van weleer maakt het een logische opvolger van C en C++. Ook is het ingericht om de kracht van moderne hardware te benutten, met een goede basis ter ondersteuning van parallellisatie en asynchronous programming. Voor sommige doeleinden zoals automotive is er nog wel standaardisering nodig. Het is maar de vraag of Rust daarop zal inspelen. Hoe dan ook lijken programmeurs maar wat graag over te stappen naar een taal die van oudsher veel voorkomende fouten voorkomt.