Warum sich das Lernen von Rust für Ingenieure lohnt

In der Welt der Softwareentwicklung ist Rust eine schnell wachsende Sprache, die für ihre Sicherheit und Leistungsfähigkeit bekannt ist. Dieser Artikel richtet sich an Ingenieure im Computer-aided Engineering, Doktoranden in Ingenieursstudiengängen und alle anderen interessierte Ingenieure, die entweder vorrangig mit MATLAB oder Python arbeiten oder vor der Entscheidung stehen welche Programmiersprache sie lernen sollen, und beleuchtet, warum Rust einen Blick wert ist – insbesondere für interdisziplinäre Projekte zwischen Engineering und Software-Entwicklung, zum Beispiel bei der Simulation, der Optimierung oder der Daten-aufbereitung und -Visualisierung. Der Artikel gliedert sich in die folgenden Abschnitte:

Nach dem Lesen hast du:

  • Gründe, warum es als Ingenieur sinnvoll ist Rust zu lernen
  • Verstanden warum es mittelfristig besser ist Rust als eine andere Sprache zu lernen
  • Eine gute Idee wieso Rust gerade für Sicherheitsrelevante Software enorme Vorteile bietet
  • Weitere Ressourcen, die dir helfen Rust anwendungsnah zu lernen.

Was ist Rust und wo liegen die Unterschiede zu anderen Programmiersprachen?

Rust ist eine moderne, systemnahe Programmiersprache, die für ihre Leistungsfähigkeit und Sicherheit bekannt ist. Entwickelt mit dem Ziel, die Schwächen traditionellerer Sprachen wie C und C++ zu überwinden, legt Rust einen besonderen Fokus auf Sicherheit, Geschwindigkeit und nebenläufige Programmierung. Im Gegensatz zu Sprachen wie Python und MATLAB, die oft für ihre Einfachheit und schnelle Entwicklungsfähigkeit gelobt werden, bietet Rust eine robustere Umgebung für die Entwicklung von Software.

Um dem Lob der Einfachheit dieser Sprachen etwas zu trotzen, möchte ich hier auf die Lernkurve eingehen. Häufig wird Rusts Lernkurve als sehr steil wahrgenommen. Das hat meiner Meinung nach zwei Gründe:

  1. Die meisten Lernmaterialien sind auf das Lernen mittels Bücher oder Beispielen ausgelegt
  2. Die Lernmaterialien stellen komplexe Konzepte wie Ownership, Borrow-Checking und Lifetimes frühzeitig in den Fokus, anstatt Anwendungs-Probleme zu lösen.

Nicht vielen ist bewusst, es existiert ein Schnittpunkt in den Lernkurven von Rust und anderen Sprachen: Wo dieser liegt wird jeder subjektiv etwas anders emfinden, aber allein das starke Typsystem von Rust hilft bei vielen Programmierherausforderungen. Spätestens wenn man die Parallelfähigkeit von Computern ausnutzen möchte, dann entwickelt sich die Lernkurve von Rust in Vergleich zu anderen Programmiersprachen so wie in der Abbildung:

Abbildung 1- Lern Kurven, Rust gegenüber anderen Sprachen. Zu Beginn ein höherer Lernaufwand, aber die gelernten Konzepte funktionieren auch ohne Spezialfälle für komplexe Softwarelösungen.

Das bedeutet, solange man auf einem niedrigen Lernfortschritt (links auf x-Achse) bleibt sind andere Programmiersprachen, wie Python und MATLAB, zielführender. Sobald es darum geht etwas Komplexeres umzusetzen kann Rust seine Vorteile ausspielen und das muss nicht Parallelisierung sein. Es kann eine Codebasis mit mehreren Dateien und Funktionen sein in der aufgrund des dynamischen Typsystems der Überblick verloren wird. Und falls später Parallelisierung eingesetzt wird, dann ist man durch die Konzepte, die man in Rust gelernt hat, bestens gerüstet.

Heißt das jetzt man sollte Rust statt Python oder MATLAB lernen, wenn man vor der Wahl steht?

Kurze Antwort, ohne deine Situation zu kennen: Wenn du Zeit zum Lernen einer Programmiersprache hast, dann ist Rust wohl die beste Programmiersprache, die du zurzeit auswählen kannst.

Aber, natürlich sollten wir deine Situation berücksichtigen, die ich nicht kenne. Gute Fragen sind:

  • Verwendet mein (neuer) Arbeitgeber hauptsächlich Quelltext in einer anderen Sprache?
  • Wie weit ist das Rust Ökosystem in dem jeweiligen Bereich, in dem ich arbeiten möchte und passt das zu meinen Zielen? Vielleicht kannst du dich während deiner Promotion gut in einem Open-Source Projekt einbringen. Informationen dazu gibt es auf Seiten wie:

Wenn du mal reinschauen möchtest, verlinke ich hier auch am 05.12.2023 das erste Video zu der Serie „Pragmatic Rust for Engineers“.

Warum sind so viele Programmierer so begeistert von Rust?

Programmierer sind aus mehreren Gründen von Rust begeistert, aber drei Hauptaspekte stechen besonders hervor: Cargo, das hervorragende Werkzeug und Paketmanagement-System für Rust. Die klaren, hilfreichen Fehlermeldungen, die Rusts Fokus auf Sicherheit und Effizienz unterstützen. Sowie die starke Standardbibliothek mit hervorragenden Best-Practices für robuste Software. Ds folgende Meme erklärt es hervorragend:

Abbildung 2 – Meme im Bezug zum Film Matrix – Beide Pillen ‚Sicherheit/rot‘ and Performanz/blau‘ genommen.

Trotzdem hier weiterführende Absätze zu den drei Hauptaspekten.

Cargo – Moderne Werkzeuge und exzellenter Paketmanager

Cargo ist eines der leistungsfähigsten Werkzeuge im Rust-Ökosystem. Es dient nicht nur als Paketmanager, sondern auch als Build-System und umfasst eine Vielzahl von Funktionen, die das Leben eines Entwicklers erleichtern. Im Vergleich zu dynamischen Sprachen wie Python bietet Cargo eine integrierte, konsistente Umgebung für das Erstellen, Testen und Verwalten von Abhängigkeiten. Es verwaltet automatisch alle Abhängigkeiten und deren Versionen, wodurch die Gefahr von Kompatibilitätsproblemen oder „Dependency Hell“ drastisch reduziert wird. Zudem ermöglicht Cargo eine reibungslose Integration von Drittanbieter-Bibliotheken und erleichtert so die Arbeit an komplexen Projekten.

Deutliche Fehlermeldungen und Borrow-Checking

Ein weiterer Grund für die Begeisterung um Rust ist sein Ansatz zur Fehlerbehandlung. Rust ist bekannt für seine präzisen und hilfreichen Fehlermeldungen. Dies ist besonders wichtig, da Rust ein strenges Borrow-Checking-System verwendet, das sicherstellt, dass Referenzen und Zeiger korrekt gehandhabt werden. Diese Fehlermeldungen sind nicht nur klar, sondern oft auch didaktisch, indem sie Vorschläge zur Fehlerbehebung und Erklärungen zum besseren Verständnis der Sprachkonzepte bieten. Das Resultat ist ein Lernprozess, der Programmierern hilft, sichere und performante Programme zu entwickeln. Diese Art von Unterstützung ist in dynamischen Sprachen wie Python in dieser Form nicht vorhanden und stellt einen erheblichen Mehrwert für Entwickler dar, die an der Entwicklung von zuverlässigem und wartbarem Code interessiert sind.

Starke Standardbibliothek und hervorragende Best-Practices zur Fehlerbehandlung

Ein weiterer Aspekt, der Rust für Entwickler besonders attraktiv macht, ist seine umfangreiche und gut durchdachte Standardbibliothek. Diese Bibliothek bietet eine reiche Auswahl an Funktionalitäten, von grundlegenden Datentypen bis hin zu komplexen Strukturen und Algorithmen, was es Entwicklern ermöglicht, robuste Programme zu schreiben, ohne auf externe Bibliotheken angewiesen zu sein.

Die Einbindung von Crates wie thiserror und anyhow in Rust-Projekte veranschaulicht die Best Practices, die in der Rust-Community gefördert werden. thiserror ist für die vereinfachte Erstellung und Verwaltung von benutzerdefinierten Fehlertypen konzipiert und trägt zur Klarheit und Wartbarkeit des Codes bei. anyhow, auf der anderen Seite, bietet eine unkomplizierte und flexible Handhabung von Fehlern, was besonders in Situationen nützlich ist, wo die spezifische Natur des Fehlers weniger relevant ist. Diese Tools fördern nicht nur eine saubere und effiziente Fehlerbehandlung, sondern verbessern auch die Lesbarkeit und Wartbarkeit des Codes.

In Kombination ermöglichen die starke Standardbibliothek und diese spezialisierten Crates Entwicklern, qualitativ hochwertigen, zuverlässigen und wartbaren Code zu schreiben, der sowohl in der Entwicklung als auch in der Wartung effizient ist. Die Integration dieser Best Practices in den Entwicklungsprozess ist ein weiterer Grund, warum Rust in der Programmiergemeinschaft immer beliebter wird.

Ich nutze Python oder Matlab, wieso sollte ICH Rust lernen?

Das ist sehr gut. Viele Softwarelösungen haben mit einer Skriptsprache begonnen. Zum Beispiel wurden die ersten Versionen von Facebook in PHP entwickelt, bevor das Backend auf C++ umgestellt wurde (Blog Post von 2010). Rust stellt eine großartige Ergänzung deines Repertoires dar. Rust ermöglicht es dir, leistungsstarke Module zu entwickeln, die direkt mit Python oder MATLAB interagieren können, dank Tools wie dem Crate pyo3. Dies erweitert nicht nur deine technischen Möglichkeiten, sondern stärkt auch deine Rolle in interdisziplinären Teams, indem Sie eine Brücke zwischen unterschiedlichen technischen Disziplinen bilden

Persönlich halte ich, dass du noch besser interdisziplinär aufgestellt sein wirst, für den wichtigsten Grund. So bist du in deinem Unternehmen dank deiner Erfahrung eine ideale Schnittstelle zwischen eurem Domainwissen und dem Softwareentwickler. Die Software-Industrie hat im Laufe der 90iger Jahren dank dem Konzept der Objekt-orientierten Programmierung eine Kommunikation mit Kunden vereinfacht. Leider ist aus Sicht der Software-Architektur ist eine 1zu1 Abbildung der Kundendomäne selten die beste Lösung.

Abbildung 3 – Eine große Herausforderung in technischen interdisziplinären Projekt ist es Mitarbeiter zu finden, die die Sprache von verschiedenen Fachbereichen sprechen. – Bildquelle Pixabay – by “Geralt“

Bei der Entwicklung von komplexen Softwareprojekten sind Struktur und Design entscheidend. Geprägt mit diesen Anforderungen wurde der Begriff der Objektorientierung. Das ist eine Menge von Vorgehensweisen und einige davon, wie die Vererbung, führen schnell zu mehr Problemen als zu einem guten Design. Es gibt einen starken Gegenstrom gegen Vererbung, wie sie momentan in vielen Objektorientierten Sprachen eingesetzt wird, siehe z.B. diesen Blog Post. Im Gegensatz zu den traditionellen objektorientierten Programmiersprachen, die komplexe Vererbungshierarchien erlauben und bewerben bietet Rust einen einfacheren und klareren Ansatz mit ‚Traits‘.

Darüber hinaus bietet Rust Vorteile in Bezug auf die Time-to-market, ohne dabei Kompromisse bei der Leistung oder Sicherheit einzugehen. Dies macht Rust besonders attraktiv für Projekte in Bereichen wie der Automobilindustrie, Luft- und Raumfahrt oder der Steuerung von chemischen Anlagen, wo Zuverlässigkeit und Performance entscheidend sind. Die wachsende Popularität von Rust in der Industrie bestätigt seinen Wert und seine Vielseitigkeit, was es zu einer klugen Wahl für zukunftsorientierte Ingenieure macht.

Rust für sicherheitskritische Software

In der Entwicklung sicherheitskritischer Software spielt Rust eine zunehmend wichtige Rolle, insbesondere aufgrund der Sicherheitsgarantien, die es bereits zur Compilezeit liefert. Technisch basieren diese Garantien auf Konzepten wie dem Ownership Model, dem Borrow-Checker und Lifetimes, die z.B. im Rust Book erklärt werden. Außerdem ist und wird Rust für viele Sicherheitsspezifikationen, wie die Normen wie ISO 26262 für die Automobilsoftware oder DO-178C für luftfahrttechnische Software, zetifiziert.

Ein hervorragendes Beispiel dafür ist Ferrocene, ein Compiler für Rust, der speziell für die Entwicklung sicherheitskritischer Systeme konzipiert wurde. Ferrocene garantiert die Einhaltung strenger Sicherheitsstandard. Durch die Integration von Ferrocene in den Entwicklungsprozess können Teams die Compliance mit relevanten Sicherheitsstandards effizienter gestalten und gleichzeitig die Zuverlässigkeit ihrer Software erhöhen.

Ein weiteres Beispiel ist PXROS von HighTec EDV Systeme GmbH, die eine Historie im Automotive Markt für sicherheitskritische Software haben und in ihrem Echtzeit-Betriebssystem PXROS auch eine Rust Entwicklungs-Plattform anbieten. Ein interessanter Fakt ist das PXROS nur einem Task den Zugriff auf ein Datenobjekt zur gleichen Zeit erlaub. Um Zugriff auf Daten zwischen Tasks zu übertragen, wird ein Messaging System verwendet, dass ähnelt konzeptionell dem Ownership Model von Rust.

Abbildung 4 – Sicherheitskritische Industrien wie die Chemie/Medizin, Transportwesen, sowie die Energieindustrie werden in der Zukunft stark von Rust profitieren.

Der Einsatz von Rust und spezialisierten Compilern wie Ferrocene in sicherheitskritischen Anwendungen hat einen deutlichen Einfluss auf die Spezifikationsprüfung. Die Fähigkeit, viele Aspekte der Sicherheitsüberprüfung in der Toolchain abzubilden und auf Rust mit seinen Garantien zu setzen verringert den Aufwand und die Komplexität bei der Einhaltung von Sicherheitsstandards, verbessert die Gesamtqualität und Zuverlässigkeit der Software und ermöglicht schneller Iterationszyklen. Dies macht Rust zu einer zunehmend wichtigere Wahl für Projekte in Branchen, in denen Sicherheit von größter Bedeutung ist.

An dieser Stelle möchte ich noch ein paar weiterführende Artikel auflisten, die die Vorteile von Rust beleuchten:

Fazit: Rust als Brücke in der interdisziplinären Ingenieursarbeit

Für Ingenieure, die sich an der Schnittstelle von Engineering und Softwareentwicklung bewegen, ist das Erlernen von Rust eine wertvolle Investition. Rust erweitert nicht nur das technische Repertoire, sondern ermöglicht auch eine effektivere Kommunikation und Zusammenarbeit in interdisziplinären Teams. Durch die Aneignung dieser modernen, systemnahen Sprache können die Grenzen von Python und MATLAB überschritten werden und man kann sich den Herausforderungen der heutigen Softwarelandschaft, insbesondere in sicherheitskritischen Bereichen, mit mehr Selbstvertrauen stellen. Kurz gesagt, Rust bereichert deine Fähigkeiten nicht nur um eine leistungsstarke Programmiersprache, sondern öffnet auch neue Wege in der Zusammenarbeit und Innovation. Die investierte Zeit in Rust zahlt sich durch verbesserte Softwarequalität, höhere Effizienz und erweiterte Möglichkeiten in der interdisziplinären Technologieentwicklung aus.

Falls du bald mit dem Erlernen von Rust beginnen willst, freue ich mich dir mitteilen zu können, dass ab Dezember 2023 eine Video-Serie „Pragmatic Rust for Engineers“ veröffentlicht und hier verlinkt wird. Damit hast du einen stark auf Anwendungen bezogene Einführung, die dir schnell beibringt, Differentialgleichungen zu lösen, Daten zu visualisieren und interaktive Elemente in Rust zu nutzen. Ich würde mich freuen dich als Zuschauenden dabei zu haben.

Schreibe einen Kommentar