C++ und Rust

Trotz einer Vielzahl aufstrebender Alternativen ist C++ immer noch eine Macht, mit der man rechnen muss, vor allem in der von Altlasten geplagten High-Tech-Branche. In einer Reihe von Artikeln stellt der Trainer des High Tech Institute, Kris van Rens, die Sprache in eine moderne Perspektive. In unserem neuen 4-tägigen Trainingskurs führt Kris van Rens die Teilnehmer in die Grundlagen der Sprache und die wichtigsten Best Practices ein.

Alle paar Jahre werden C und C++ für tot erklärt. Kürzlich hat Mark Russinovich, CTO von Microsoft Azure, öffentlich erklärt, dass sie zugunsten von Rust veraltet sein sollten. Das ist zwar eine persönliche Äußerung, aber für jemanden von Microsoft, der über eine enorme C++-Codebasis und viele aktive Mitglieder im C++-Komitee verfügt, ist das eine interessante Meinung.

Unabhängig davon sind C und C++ immer noch sehr lebendig – beide sind die Lingua Franca vieler industrieller Softwareentwicklungsumgebungen. Und doch ist Rust derzeit der „Place to be“ im Land der Systemprogrammierung. Was ist es, das diese Sprache so attraktiv macht? Betrachten wir sie einmal aus der Perspektive von C++.

Bemerkenswerte Unterschiede

Zunächst einmal bietet Rust einen klaren und objektiven Vorteil gegenüber C++: garantierte Speichersicherheit für das kompilierte Ergebnis. Im Wesentlichen tauscht Rust die Kompilierungszeit (und die Komplexität des Compilers) gegen eine sicherere Laufzeit ein. Der Compiler wird versuchen, sich selbst davon zu überzeugen, dass der Code, den Sie ihm übergeben, speichersicherfähig ist. Dazu verwendet er sein Typsystem und manchmal auch die Hilfe des Entwicklers, um Dinge wie die Abhängigkeit von Variablen oder die Lebensdauer von Referenzen anzuzeigen.

Mehrere unabhängige Sicherheitsstudien zu großen C- und C++-Codebasen haben gezeigt, dass übereinstimmend satte 70 Prozent aller Bugs und Sicherheitsprobleme mit der Speichersicherheit zusammenhängen. In Anbetracht dessen scheint der Tausch von Kompilierzeit gegen eine speichersichere Laufzeit eine logische Schlussfolgerung zu sein. Wenn Sie qualitativ hochwertiges C++ mit den richtigen Tools, Tests, Best Practices und Compiler-Sanitizern schreiben, können Sie dieses Ziel auch erreichen, aber es gibt keine festen Garantien von Anfang an. Die ‚Leitplanken‘, die Rust implementiert, um Sie davor zu schützen, sich selbst in den Fuß zu schießen, mögen manchmal komplex oder sogar ärgerlich sein, aber denken Sie an die beträchtlichen Vorteile, die eine Garantie für die Speichersicherheit zur Laufzeit bei der Programmierung von nebenläufiger Software bietet.

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

Ein weiterer bemerkenswerter Unterschied zu C++ ist die Art und Weise, wie Rust die Behandlung von Fehlern und Funktionsergebniswerten integriert. Im Gegensatz zu C++ gibt es keine Ausnahmen. Rust bietet Mechanismen zur Behandlung von Fehlern über den normalen Kontrollfluss. Die Ergebniswerte müssen verarbeitet werden, so dass der Entwickler gezwungen ist, eine Fehlerbehandlung zu implementieren und fehlerhaften Code zu verhindern, so dass Fehler oder Ausnahmen nur selten unter dem Radar verschwinden. Wenn während der Laufzeit wirklich etwas schief läuft – z.B. wenn der Speicher erschöpft ist – erzeugt Rust eine so genannte Panik, einen fatalen Fehler, der den betreffenden Thread anhält (der anständig behandelt werden kann).

Der Rust-Compiler, der auf dem LLVM-Compiler-Backend aufbaut, ist offensichtlich sehr pedantisch, um die Speichersicherheit und die Korrektheit des Codes aufrechtzuerhalten, aber gleichzeitig auch sehr hilfreich. Betrachten Sie ihn als ein Paar Programmierer, das Ihnen über die Schulter schaut und lesbare Fehlermeldungen liefert und sogar mögliche Lösungen vorschlägt. Abgesehen vom Compiler dreht sich der größte Teil des Rust-Tooling-Ökosystems um Cargo, das ein Build-System, einen Paket- und Abhängigkeitsmanager und vieles mehr in einem ist. Trotz der Fülle an Paketmanagern, Build-Systemen und anderen Tools, die für C++ zur Verfügung stehen, kann das Einrichten eines ernsthaften C++-Projekts immer noch eine Qual sein.

Da Rust relativ jung ist, hatte es den Luxus, über 40 Jahre Sprachentwicklung in seine Syntax und Struktur einfließen zu lassen. Ein Großteil der Inspiration wurde sowohl von imperativen Sprachen wie C++ als auch von funktionalen Sprachen wie Haskell und Scheme übernommen. Das verleiht ihr den subjektiven Vorteil eines sehr ‚modernen‘ Gefühls. Außerdem sind viele Dinge in Rust Ausdrücke, die mehr Flexibilität in der Code-Notation bieten.

In meinem vorherigen Beitrag habe ich argumentiert, dass die Benutzerbasis einer Programmiersprache von größter Bedeutung ist. Mit Hilfe der Rust Foundation baut Rust diese Benutzerbasis allmählich auf, wie sich aus vielen Indikatoren wie dem Tiobe-Index und der Stack Overflow-Umfrage sowie der Aufnahme von Rust in den Linux-Kernel v6.1 ableiten lässt – keine geringe Leistung. Da immer mehr Sicherheitsberichte von positiven Effekten sprechen, die eng mit der Verwendung von speichersicheren Sprachen wie Rust zusammenhängen, wird die Benutzerbasis weiter wachsen. Jeder Hinweis (kein Wortspiel beabsichtigt) scheint auf eine glänzende Zukunft für Rust hinzuweisen.

Nicht nur Sonnenschein und Rosen

Sollten wir dann C und C++ zugunsten von Rust einfach verwerfen? Meiner Meinung nach stellt dies eine falsche Dichotomie dar. Warum sollten wir uns zwischen dem einen oder dem anderen entscheiden müssen? Als Software-Ingenieure sollten wir das richtige Werkzeug für die jeweilige Aufgabe verwenden.

Die Umstellung auf Rust ist auch nicht nur ein Zuckerschlecken. Wenn Sie einen großen Bestand an bestehendem C++-Code haben, ist Rust nicht direkt eine Hilfe, es sei denn, Sie sind bereit, für die Interaktion auf C-APIs zurückzugreifen. Es gibt Tools für die Interoperabilität auf C++-Ebene, aber diese stecken noch in den Kinderschuhen. Natürlich könnten Sie Ihren Code auch neu schreiben – aber das wird nicht einfach sein, vor allem nicht, wenn Sie sich stark auf erweiterte Vorlagen stützen. Und wenn Sie sich auf absolute Maximalanforderungen an die Leistung verlassen, ist Safe Rust dem vielleicht (noch?) nicht gewachsen. Außerdem schreiben Standards in strengeren Umgebungen wie der Automobil- oder Luftfahrtindustrie oft die Verwendung einer formal spezifizierten Programmiersprache vor, was Rust derzeit nicht ist.

Der beste Rat ist, sich nicht auf eine einzige Programmiersprache festzulegen. Das Erlernen mehrerer Sprachen ist im Allgemeinen sehr vorteilhaft und wird Ihre Kompetenz, Ihren Stil und Ihre Kenntnisse in jeder Sprache, die Sie beherrschen, verbessern. Werfen Sie also einen Blick auf C++, Rust und andere Alternativen, um Ihren Blickwinkel zu erweitern – oder einfach nur, um Spaß zu haben.

„Es macht großen Spaß zu sehen, wie jemand die Botschaft wirklich versteht.

Trainer Hans Vermeulen & Kees Verbaan
Die Ausbilder Kees Verbaan und Hans Vermeulen über den Spaß an der Ausbildung. Sie blicken zurück auf die Schulung zur passiven Dämpfung bei ASML in Wilton, für die sie 2022 die höchste Trainerbewertung erhielten.

Kees Verbaan und Hans Vermeulen, die beiden High Tech Institute Teachers of the Year 2022, waren überrascht über ihre Auszeichnung. Aber nicht so sehr über die hohe Wertschätzung, die sie von den Teilnehmern der Schulung Passive Dämpfung bei ASML Wilton in den USA erfuhren. Unsere Geschichte fand dort Anklang“, sagen beide. Vermeulen: ‚ASML ist eindeutig führend bei der Technologieentwicklung. Sie sehen, dass es wirklich notwendig geworden ist, passive Dämpfung anzuwenden. In einem lithografischen Scanner gibt es mehrere Dämpfer, und in diesen Maschinen findet man sie überall.‘

Die Technologieexperten bei ASML sind relativ gut ausgebildet und haben oft mit vielen komplexen Problemen zu tun gehabt. Vermeulen: ‚Eine solche Gruppe von Ingenieuren vor Ort zu unterrichten, bedeutet eine Menge Interaktion. Sie halten sehr gut mit, was den Wissensstand angeht. Auch das Thema passt zu ihnen. Es überrascht nicht, dass sie mit vielen kritischen Fragen kamen.‘ Verbaan: ‚Man spürt die Dringlichkeit. Es hat großen Spaß gemacht, mit ihnen auf der Höhe der Zeit zu diskutieren. Viele der Ingenieure hatten auch einen dynamischen Hintergrund, so dass eigentlich alle Themen des Kurses gut ankamen.‘

Hans Vermeulen Trainer Passive Dämpfung
Prof. Hans Vermeulen von der Technischen Universität Eindhoven.

Der Bedarf an Schulungen bei ASML ist auf den großen Zustrom zurückzuführen. An allen Entwicklungsstandorten werden viele Leute eingestellt, auch in Wilton“, sagt Vermeulen. Als ich 2017 für ASML Research dort war, hatten sie etwa 350 Entwicklungsingenieure auf der Gehaltsliste. Ich glaube, diese Zahl hat sich inzwischen vervierfacht.

Der Hauptzweck der Schulungen besteht darin, dass alle im Unternehmen die gleiche Sprache sprechen. Angehende Mechatroniker folgen dem gleichen Lehrplan mit vier Grundschulungen. Die Grundausbildung ‚Mechatronik‘ Teil 1 und 2, ‚Dynamik und Modellierung‚ und ‚Passive Dämpfung für High-Tech-Systeme‚.‘

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

Passive Dämpfung ist die neueste Entwicklung. Das Wissensgebiet ist auf dem Vormarsch, denn die traditionellen Konstruktionsmethoden, die allein auf Massen und Federn beruhen, sind für die neuesten Anforderungen nicht mehr ausreichend. In der Vergangenheit war das nicht nötig. Lange Zeit konnten die Konstrukteure die Resonanzfrequenzen durch leichtere und steifere Strukturen erhöhen, um die erforderliche Präzision zu erreichen. Aber wir stoßen mehr und mehr an Grenzen. Deshalb haben wir begonnen, die Schwingungsamplituden bei Resonanzen durch Dämpfung zu reduzieren“, sagt Vermeulen. Das ist ein Element, das man sorgfältig einbauen muss. Das Ziel ist es, einem System Energie zu entziehen, um unerwünschte Vibrationen zu reduzieren. Aber es kann auf Kosten der Positionierungsgenauigkeit gehen, wenn Sie es nicht richtig einsetzen.

Sollte jeder Maschinenbauingenieur in einem High-Tech-Unternehmen darüber Bescheid wissen?

Es ist auf jeden Fall gut, sich dessen bewusst zu sein. Im Bauwesen wird die Dämpfung schon seit Jahrzehnten bei Wolkenkratzern und Brücken eingesetzt.‘ Vermeulen findet es schwierig, einen Vergleich mit seinem eigenen Fachgebiet zu ziehen, aber er sieht immer noch, dass heutzutage einiges schief läuft. Manchmal gibt es Resonanzen in Flugzeugflügeln und Brückendecks, die hätten vermieden werden können, wenn die entsprechenden Analysen durchgeführt worden wären, wie zum Beispiel bei der Londoner Millennium Bridge. Egal, aus welchem Bereich Sie kommen, als Ingenieur ist es gut zu wissen, wie man es anwendet. Aber es beginnt mit einem soliden mechanischen Design. In dem Moment, in dem man sie braucht, ist es praktisch, sie zur Hand zu haben.‘

Verbaan: ‚Nicht jeder muss in der Lage sein, sie bis ins kleinste Detail zu implementieren oder sie vollständig zu berechnen. Aber ein gutes Verständnis dafür, wie man leichte und steife Strukturen schafft, auf die man dann möglicherweise Dämpfung anwendet, um ein optimales Ergebnis zu erzielen, sollte man meiner Meinung nach schon haben.

Kees Verbaan passiver Dämpfungstrainer
Dr. Kees Verbaan von der Technischen Universität Eindhoven.

Verbaan sagt über den Spaß an der Ausbildung: „Es macht großen Spaß, wenn man ein Thema selbst versteht und dann sieht, dass jemand die Botschaft wirklich versteht. Das löst bei dieser Person, aber auch bei mir selbst, große Begeisterung aus.

Vermeulen sagt, dass er dies erkannt hat. Ich mag es sehr, Dinge wirklich zu vermitteln. Das Training ist auch auf dieses Ziel hin ausgelegt. Wir besprechen, wie man mit Dämpfung mathematisch umgeht, über Massen-, Feder- und Dämpfungsmatrizen. Aber darüber hinaus üben die Teilnehmer schon sehr früh im Kurs anhand eines elementaren Falles, wie man die Schwingungsamplitude eines Masse-Feder-Systems in zehn Zyklen durch Energiedissipation beispielsweise um den Faktor hundert reduziert. Dann wird deutlich, was es bedeutet, Dämpfung anzuwenden.

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

Verbaan: Sie fangen an zu denken: ‚Was bedeutet das?‘, und sehen dann schnell, was ein Dämpfer wirklich tut und welche Definitionen damit verbunden sind. Auf diese Weise wecken wir das Interesse, das sie brauchen, um sich später mit anderen Fällen zu beschäftigen.‘

Neben den elementaren Grundlagen behandeln die beiden auch Design und Modellierung sowie eine praktische Übung, um es selbst umzusetzen. Außerdem wird gezeigt, wie die Teilnehmer es in ihrer eigenen Praxis anwenden können. Diese Kombination schafft eine sehr schöne Interaktion“, sagt Verbaan. Einige Ingenieure sind sehr stark mit der Modellierung beschäftigt, andere haben mehr praktische Erfahrung. Wir sehen dort eine Menge Interaktion zwischen den Teilnehmern, und das gibt uns eine Menge Energie.

Wie ist die Interaktion bei den passiven Dämpfungstrainings mit offener Einschreibung?

Dort sehen wir mehr gemischte und vielfältige Gruppen“, sagt Verbaan. Dort ist es manchmal schwieriger, alle dazu zu bringen, bei jedem einzelnen Thema sofort mitzumachen. Für Materialwissenschaftler ist die Erfahrung eine ganz andere als für jemanden, der es gewohnt ist, mit komplexen dynamischen Modellen zu arbeiten. In Wilton kamen alle Themen bei allen Teilnehmern gut an.

Dieser Artikel wurde von René Raaijmakers, dem technischen Redakteur von High-Tech Systems, geschrieben.

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.