C++ en Rust

Ondanks een groot aantal opkomende alternatieven is C++ nog steeds een kracht om rekening mee te houden, zeker in de door legacy geplaagde high-tech industrie. In een serie artikelen plaatst High Tech Institute trainer Kris van Rens de taal in een modern perspectief. In onze nieuwe 4-daagse training laat Kris van Rens deelnemers kennismaken met de basisprincipes van de taal en essentiële best practices.

Om de paar jaar worden C en C++ doodverklaard. Onlangs verklaarde Microsoft Azure CTO Mark Russinovich publiekelijk dat ze afgeschreven zouden moeten worden ten gunste van Rust. Hoewel dit op persoonlijke titel is geuit, is het een interessant standpunt voor iemand van Microsoft, dat een enorme C++ codebase heeft en veel actieve leden in de C++ commissie.

Hoe dan ook, C en C++ zijn nog steeds springlevend – elk de lingua franca van veel industriële softwareontwikkelomgevingen. Toch is Rust tegenwoordig blijkbaar de ‘place to be’ in systeemprogrammeerland. Wat maakt deze taal zo aantrekkelijk? Laten we het eens bekijken vanuit het perspectief van C++.

Opmerkelijke verschillen

Ten eerste biedt Rust een duidelijk en objectief voordeel ten opzichte van C++: gegarandeerde geheugenveiligheid voor het gecompileerde resultaat. In wezen ruilt Rust compilatietijd (en compilercomplexiteit) voor een veiligere runtime. De compiler zal zichzelf proberen te bewijzen dat de code die je hem geeft geheugenveilig is, door gebruik te maken van zijn typesysteem en soms de hulp van de ontwikkelaar om dingen aan te geven zoals afhankelijkheden van variabele of referentielevensduur.

Er zijn meerdere onafhankelijke beveiligingsonderzoeken uitgevoerd op grote C en C++ codebases waaruit is gebleken dat maar liefst 70 procent van alle bugs en beveiligingsproblemen te maken heeft met geheugenveiligheid. In het licht hiervan lijkt het inruilen van compileertijd voor een geheugenveilige runtime een no-brainer. Het schrijven van C++ van hoge kwaliteit met behulp van de juiste tools, tests, best practices en compiler sanitizers kan u daar ook brengen, maar het biedt geen harde garanties vanaf het begin. De ‘vangrails’ die Rust implementeert om u te beschermen tegen jezelf in de voet schieten kunnen soms complex of zelfs irritant zijn, maar denk eens aan de aanzienlijke voordelen die een runtime geheugenveiligheidsgarantie met zich meebrengt voor het programmeren van gelijktijdige software.

''As software engineers, we should use the right tool for the job.''

Een ander opmerkelijk verschil met C++ is de manier waarop Rust de afhandeling van fouten en functieresultaatwaarden integreert. In tegenstelling tot C++ heeft het geen uitzonderingen; het biedt mechanismen om met fouten om te gaan met behulp van reguliere controlestroom. Resultaatwaarden moeten worden verwerkt, wat de ontwikkelaar dwingt om foutafhandeling te implementeren en onjuiste code te voorkomen, dus fouten of uitzonderingen vliegen zelden onder de radar. Als het tijdens runtime echt misgaat – bijvoorbeeld als het geheugen uitgeput raakt – zal Rust een zogenaamde panic genereren, een fatale fout, waardoor de thread in kwestie stopt (wat netjes afgehandeld kan worden).

De Rust compiler, gebouwd bovenop de LLVM compiler back-end, is duidelijk erg pedant, om geheugenveiligheid en correctheid van code te handhaven, maar tegelijkertijd erg behulpzaam. Beschouw het als een koppel programmeurs, die over je schouder meekijkt en leesbare foutmeldingen geeft, en zelfs mogelijke oplossingen voorstelt. Afgezien van de compiler, draait het grootste deel van het ecosysteem van Rust rond Cargo, dat een buildsysteem, een pakket- en afhankelijkheidsmanager en nog veel meer is, alles in één. Ondanks de overvloed aan pakketbeheerders, bouwsystemen en andere tools die beschikbaar zijn voor C++, kan het opzetten van een serieus C++ project nog steeds een lastige klus zijn.

Omdat Rust relatief jong is, heeft het de luxe gehad om meer dan 40 jaar taalontwikkeling te verwerken in zijn syntaxis en structuur. Veel van de inspiratie is gehaald uit zowel imperatieve talen als C++ en functionele talen als Haskell en Scheme. Dit geeft het het subjectieve voordeel van een zeer ‘modern’ gevoel. Bovendien zijn veel dingen in Rust expressies, wat zorgt voor meer flexibiliteit in de codenotatie.

In mijn vorige bijdrage heb ik betoogd dat de gebruikersbasis van een programmeertaal van het grootste belang is. Rust, met hulp van de Rust Foundation, bouwt geleidelijk aan deze gebruikersbasis, zoals kan worden afgeleid uit vele indicatoren, zoals de Tiobe-index en het Stack Overflow-onderzoek, en door de adoptie van Rust in de Linux v6.1 kernel – geen geringe prestatie. Naarmate meer en meer beveiligingsrapporten melding maken van netto positieve effecten die sterk gerelateerd zijn aan het gebruik van geheugenveilige talen zoals Rust, zal de gebruikersbasis blijven groeien. Elke aanwijzing (geen woordspeling bedoeld) lijkt te wijzen op een mooie toekomst voor Rust.

Niet alles rozengeur en maneschijn

Moeten we dan gewoon C en C++ afschrijven ten gunste van Rust? Naar mijn mening is dit een valse dichotomie. Waarom zouden we moeten kiezen tussen het een of het ander? Als software-ingenieurs moeten we het juiste gereedschap voor de klus gebruiken.

Migreren naar Rust is ook niet allemaal rozengeur en maneschijn. Als je een grote hoeveelheid bestaande C++ code hebt, zal Rust niet direct helpen, tenzij je bereid bent om C API’s te gebruiken voor interactie. Er zijn tools voor C++-niveau interoperabiliteit, maar deze staan nog in de kinderschoenen. U kunt natuurlijk ook uw code herschrijven, maar dat zal niet eenvoudig zijn, vooral niet als u zwaar leunt op geavanceerde sjablonen. En als je vertrouwt op absolute maximale prestatie-eisen, is safe Rust daar misschien (nog?) niet op berekend. Bovendien, in strengere omgevingen zoals de auto- of luchtvaartindustrie, schrijven standaarden vaak het gebruik van een formeel gespecificeerde programmeertaal voor, wat Rust op dit moment niet is.

Het beste advies is om je niet vast te pinnen op één programmeertaal. Het leren van meerdere talen is over het algemeen echt nuttig en zal uw competentie, stijl en kennis verbeteren in elke taal die u beheerst. Kijk dus eens naar C++, Rust en andere alternatieven om je perspectief te verbreden – of gewoon voor de lol.

“Het is heel leuk om te zien hoe iemand de boodschap echt begrijpt”

Trainers Hans Vermeulen & Kees Verbaan
Trainers Kees Verbaan en Hans Vermeulen over het plezier van trainen. Ze kijken terug op de passieve demping training bij ASML in Wilton, waarvoor ze de hoogste trainersscore in 2022 kregen.

Kees Verbaan en Hans Vermeulen, de twee High Tech Institute Teachers of the Year 2022, waren verrast met hun prijs. Maar niet zozeer over de hoge waardering die erachter zat van de deelnemers aan de Passive damping training bij ASML Wilton in de VS. ‘Ons verhaal vond daar weerklank’, zeggen beiden. Vermeulen: ‘ASML loopt duidelijk voorop als het gaat om technologieontwikkeling. Je ziet dat het echt noodzakelijk is geworden om passieve demping toe te passen. Er zitten meerdere dempers in een lithografische scanner, eigenlijk kom je ze in deze machines overal tegen.’

Technologen bij ASML zijn relatief goed opgeleid en vaak betrokken geweest bij veel complexe problemen. Vermeulen: ‘Het lesgeven aan zo’n groep engineers op locatie impliceert veel interactie. Ze blijven heel goed bij qua kennisniveau. Het onderwerp past ook bij ze. Niet verwonderlijk dat ze met veel kritische vragen kwamen.’ Verbaan: ‘Je voelt de urgentie. Het was erg leuk om met hen discussies te voeren op het scherpst van de snede. Veel van de ingenieurs hadden ook een dynamische achtergrond, dus eigenlijk sloegen alle onderwerpen van de cursus goed aan.’

Hans Vermeulen trainer Passieve demping
Prof. Hans Vermeulen aan de Technische Universiteit Eindhoven.

De behoefte aan trainingen bij ASML wordt gedreven door de grote instroom. ‘Op alle ontwikkellocaties halen ze veel mensen binnen, ook in Wilton’, zegt Vermeulen. ‘Toen ik er in 2017 was voor ASML Research hadden ze zo’n 350 development engineers op de loonlijst staan. Ik denk dat dat aantal inmiddels verviervoudigd is.’

Het belangrijkste doel van de trainingen is om iedereen in de organisatie dezelfde taal te laten spreken. ‘Beginnende mechatronici volgen hetzelfde curriculum van vier basistrainingen. De basistrainingen ‘Mechatronica’ deel 1 en 2, ‘Dynamica en modellering‘ en ‘Passieve demping voor hightech systemen‘.’

''The goal is to extract energy from a system to reduce unwanted vibrations.''

Passieve demping is de meest recente. Het kennisgebied is in opkomst omdat de traditionele ontwerpmethodes op basis van massa’s en veren alleen niet meer toereikend zijn voor de nieuwste eisen. In het verleden was dat niet nodig. Lange tijd vonden technische ontwerpers de ruimte om resonantiefrequenties te verhogen door lichtere en stijvere structuren te gebruiken om de vereiste precisie te bereiken. Maar we lopen steeds meer tegen grenzen aan. Daarom zijn we begonnen met het reduceren van trillingsamplitudes bij resonanties door middel van demping,’ zegt Vermeulen. Het is een element dat je zorgvuldig moet inbouwen. Het doel is om energie uit een systeem te halen om ongewenste trillingen te verminderen. Maar het kan ten koste gaan van je positioneringsnauwkeurigheid als je het niet goed toepast.’

Moet elke werktuigbouwkundig ingenieur in een hightechbedrijf dit weten?

Het is in ieder geval goed om je ervan bewust te zijn. In de civiele techniek wordt demping al tientallen jaren toegepast in wolkenkrabbers en bruggen.’ Vermeulen vindt het lastig om een vergelijking te trekken met zijn eigen vakgebied, maar hij ziet tegenwoordig nog steeds dingen misgaan. ‘Er zijn soms resonanties in vliegtuigvleugels en brugdekken die voorkomen hadden kunnen worden als de relevante analyses waren gedaan, zoals bijvoorbeeld bij de London Millennium Bridge. Uit welk vakgebied je ook komt, als ingenieur is het goed om te weten hoe je het moet toepassen. Maar het begint met een goed mechanisch ontwerp. Op het moment dat je het nodig hebt, is het handig om het direct beschikbaar te hebben.

Verbaan: ‘Niet iedereen hoeft het tot in detail te kunnen implementeren of volledig te kunnen berekenen. Maar een goed begrip van hoe je lichtgewicht en stijve constructies maakt, waarna je eventueel demping toepast om tot een optimaal resultaat te komen, is iets wat je volgens mij wel moet hebben.’

Kees Verbaan passieve dempingstrainer
Dr. Kees Verbaan aan de Technische Universiteit Eindhoven.

Over het plezier van de training zegt Verbaan: ‘Het is heel leuk als je zelf een onderwerp begrijpt en er dan getuige van bent dat iemand de boodschap echt snapt. Dat maakt veel enthousiasme los bij die persoon, maar ook bij mezelf.’

Vermeulen zegt dat hij dit herkent. ‘Ik wil heel graag dingen echt overbrengen. De training is daar ook op ingericht. We bespreken hoe je wiskundig met demping omgaat, over massa, veer- en dempingsmatrices. Maar daarnaast oefenen de deelnemers al heel vroeg in de cursus met een elementaire casus over hoe je de trillingsamplitude van een massa-veersysteem bijvoorbeeld met een factor honderd in tien cycli kunt verminderen door energie te dissiperen. Dan dringt door wat het betekent om demping toe te passen.

''We awaken the interest they need to tackle in other cases later on.''

Verbaan: ‘Ze gaan denken: ‘Wat betekent dat’, en zien dan al snel wat een demper eigenlijk doet en welke definities daarbij horen. Zo wekken we de interesse die ze nodig hebben om later ook andere zaken aan te pakken.’

Naast de elementaire basis komen ook ontwerp en modellering aan bod, en een praktische oefening om het zelf te implementeren. Daarnaast ook hoe deelnemers het kunnen toepassen in hun eigen praktijk. ‘Die combinatie zorgt voor een hele leuke wisselwerking’, zegt Verbaan. ‘Sommige ingenieurs zijn heel erg van het modelleren, anderen hebben meer praktijkervaring. We zien daar veel interactie tussen de deelnemers en daar halen we veel energie uit.’

Hoe is de interactie in de passieve dempingstrainingen met open inschrijving?

Daar zien we meer gemengde en diverse groepen,” zegt Verbaan. Daar is het soms lastiger om iedereen meteen mee te krijgen over elk onderwerp. Voor materiaalwetenschappers is de ervaring heel anders dan voor iemand die gewend is om met complexe dynamische modellen te werken. In Wilton sloegen alle onderwerpen goed aan bij alle mensen.

Dit artikel is geschreven door René Raaijmakers, tech editor van High-Tech Systems.

Recommendation by former participants

By the end of the training participants are asked to fill out an evaluation form. To the question: 'Would you recommend this training to others?' they responded with a 9.2 out of 10.