Eind 2022 schreef Kris van Rens over de opkomst van de programmeertaal Rust, grotendeels in dezelfde toepassingsruimte die gedomineerd wordt door C en C++. Is het traditionele landschap van systeemprogrammering echt veranderd of was het allemaal veel gedoe om niets?
Volgens de Tiobe-index staat Python eenzaam aan de top van “populairste programmeertalen”, met een score van 23 procent. Het wordt gevolgd door C++ (10 procent), Java (ook 10 procent) en C (9 procent). De index probeert inzicht te krijgen in waar mensen naar zoeken in zoekmachines, waarbij de veronderstelling is dat dit een maatstaf is voor populariteit. Als relatief jonge taal scoort Rust de 14e plaats met iets meer dan 1 procent.
In een afsluitende samenvatting schrijft Tiobe CEO Paul Jansen over Rust dat “de steile leercurve er helaas nooit voor zal zorgen dat het de lingua franca van de gewone programmeur wordt.” Het noemen van de steile leercurve van een taal als barrière om een groot succes te worden voelt enigszins dubieus vanuit het perspectief van hoe populair C++ is in combinatie met de complexiteit op schaal. Ik denk ook dat het overschatten en benadrukken van een leercurve voor een taal ontwikkelaars tekort doet – veel bedrijven die Rust in productie nemen hebben al laten zien dat het heel goed te doen is.
''When it comes to learning in general, I always tend to keep a positive attitude: people are much more capable than we might think.''
Unieke prestatie
In de afgelopen jaren heeft Rust zich gevestigd als een waardig alternatief op het gebied van productie-grade systeemprogrammering. Het laat met succes zien hoe een taal tegelijkertijd modern, performant en veilig kan zijn. De taal komt elke zes weken uit, dus er is altijd wel iets nieuws – we zijn nu bij v1.85 op het moment van schrijven. Nieuwe functies worden gelanceerd wanneer ze klaar zijn en de meeste taal- of bibliotheekwijzigingen zijn meer fragmentarisch.
Naarmate Rust volwassener wordt, neemt de populariteit en het gebruik ervan geleidelijk toe. De risicofactor om Rust te kiezen als productietaal is uitgewerkt, zoals blijkt uit de vele bedrijven die erover rapporteren. Google heeft delen van Android herschreven in Rust voor een betere beveiliging, Microsoft herschrijft kernbibliotheken van Windows in Rust en Amazon gebruikt Rust al lange tijd in zijn AWS-infrastructuur.
Een andere unieke prestatie die het vermelden waard is, is dat Rust deel uitmaakt van de mainline Linux kernel naast C. Het moet gezegd worden dat de inspanningen om de ondersteuning voor Rust uit te breiden over kernelsubsystemen niet zonder slag of stoot gaan, maar er wordt vooruitgang geboekt met de zegen van Linus Torvalds. Het zal erg interessant zijn om te zien hoe dit experiment zich verder zal ontwikkelen.
''One of my main observations is that switching back from Rust to C++ makes me feel as if I’m being flung back into the dark ages of systems software development.''
Gelukkige ontwikkelaars
De afgelopen jaren heb ik Rust intensief gebruikt naast C++. Een van mijn belangrijkste observaties is dat het terugschakelen van Rust naar C++ me het gevoel geeft dat ik teruggeworpen word in de donkere eeuwen van systeemsoftwareontwikkeling. Dit klinkt misschien hard, maar eerlijk gezegd, zelfs als ik de nieuwste versie C++23 gebruik, voelen de meeste codeertaken moeizaam en beperkt vergeleken met hoe ze zouden zijn in Rust. In het begin miste ik soms de mogelijkheid om geschreven code direct te correleren aan machinecode zoals in C++, maar dit is in 99 procent van de gevallen strikt onnodig en moderne compilers zijn sowieso veel bekwamer in optimalisatie dan mensen.
Als het aankomt op het tooling ecosysteem en integratie, is Rust van een heel ander niveau en veel meer op de hoogte van de webontwikkelingswereld van vandaag. Waar de C++ taal en compiler me vaak tegenwerken om dingen goed te krijgen, lijken de strengheid, het type systeem, de gezonde defaults en de borrow checker van Rust me op een natuurlijke manier naar de juiste ontwerpbeslissingen te leiden – contend vs guide. Wanneer mijn Rust code succesvol bouwt en de testen slagen, kan ik het project verlaten met het geruststellende gevoel dat de software niet zal crashen tijdens runtime en dat de code niet gemakkelijk gebroken kan worden door een collega. Ook de Rust macro systemen en het uitstekende kwaliteit pakket ecosysteem met bibliotheken en plugin gereedschappen voor het bouwsysteem maken een groot verschil in productiviteit.
Deze en andere aspecten maken Rust erg prettig om mee te werken. Ze maken ontwikkelaars gelukkig. Er is een reden waarom het Stack Overflow ontwikkelaarsonderzoek Rust al negen jaar op rij als de meest gewenste programmeertaal laat zien.
Dividenden
Rust is zeer geschikt voor productiegebruik, zelfs in kritieke systemen die veiligheidscertificaten vereisen (bijvoorbeeld door gebruik te maken van de Ferrocene toolchain). Ik zie de adoptie ervan als een logische stap om nu al te genieten van de voordelen van geheugenveiligheid, hoge productiviteit en meer geluk voor ontwikkelaars, in plaats van te wachten tot de huidige set tools op snelheid is met de rest van de wereld. Voeg daar de kruisbestuiving aan toe om een betere ontwikkelaar te worden in elke andere programmeertaal door een nieuwe te leren.
Als het gaat om leren in het algemeen, heb ik altijd de neiging om positief te blijven: mensen zijn veel bekwamer dan we misschien denken. Ja, de leercurve voor Rust is steiler dan die van de meeste andere talen, maar het is de moeite waard en het loont op de lange termijn. Ik zou elke dag van de week een steile leercurve en meer gezonde en strikte taalregels en garanties verkiezen boven een leven met bugs in de geheugenveiligheid van software.