Memory Leaks und Pufferüberläufe: C und C++ waren schon immer gut für schlechte Speicherverwaltung. Leider führen diese Fehler oft zu Sicherheitslücken – und das nicht zu knapp: Microsoft und Google gehen davon aus, dass 70 Prozent ihrer Sicherheitslücken auf Fehler in der Speicherverwaltung zurückzuführen sind.
Das sieht bei anderen Firmen nicht anders aus. Und das schon seit Jahren.
Rust: Die Lösung für speichersichere Programmierung?
Man sollte also etwas tun. Und das hat man auch. Was hat man nicht schon alles für Programmiersprachen erfunden, um endlich C und C++ zu überwinden? Das hat nur nie wirklich funktioniert: Entweder brauchte die Programmiersprache einen Garbage Collector und machte sich dadurch für Echtzeitanwendungen unbrauchbar. Oder sie liess ihn weg und hatte dadurch dieselben Speicherverwaltungsfehler wie C und C++.
Aber Rust löst jetzt beides: speichersicher und schnell und das ohne Garbage Collection. Möglich macht das ein besonderes Typ-System: Der Compiler achtet darauf, dass der Programmierer nicht aus Versehen Zeiger nach Nirgendwo einfügt. Das Resultat: deutlich weniger Zeit fürs Debuggen.
Für den Rust-Anfänger heisst das aber auch: Rust verhindert nicht nur Speicherfehler, sondern die ursprünglich gewünschte Funktionalität gleich mit. Es ist eine steile Lernkurve, bis es endlich kompiliert.
C++ und speichersichere Programmierung: Geht das auch?
Sichere Speicherverwaltung geht allerdings auch mit C++: Wer einen neuen Standard benutzt, sich an die CPP Core Guidelines hält und sich bei den Warning Flags des Compilers grosszügig bedient, wird sehr wahrscheinlich keine Speicherfehler mehr haben.
Dazu liefert die C++-Welt etliche Tools zur Unterstützung: Valgrind, clang-tidy, clang-sanatizer und viele mehr. Sie helfen, Probleme automatisiert zu finden, bei denen ein Rust-Programmierer allein mit seinem Compiler kämpfen muss.
Die wichtigsten Vorteile von Rust und C/C++
Vorteile Rust | Vorteile C/C++ |
---|---|
Compiler erzwingt speichersicheren Code | C++ erlaubt vielfältige Programmierparadigmen |
Der Compiler allein verhindert schlechte Praktiken | Umfangreiche Warning Flags und Tools wie clang-tidy |
Einige native Frameworks. Die Interop-Initiative erweitert Rust-Zugriff auf C++-Bibliotheken | Was es gibt, gibt es auch für C und C++ |
Wenig Legacy-Anforderungen | Rückwärtskompatibel bis in die 1970er-Jahre |
Moderne Programmiersprache | C++ entwickelt sich ständig weiter |
Junge Entwickler interessieren sich für Rust | Entwickler mit Berufserfahrung |
Die Zukunft: Wird Rust C++ ablösen?
Man kann mit C++ den Speicher sicher verwalten. Die Erfahrung mit 70 Prozent der Sicherheitslücken zeigt allerdings: Man kann es eben auch lassen. Namhafte Firmen und Software-Projekte sind deswegen dabei, auf Rust zu wechseln oder zumindest eine API dafür zur Verfügung zu stellen. Die US-Regierung verbittet sich C und C++ sogar ganz.
Es sieht also nicht gut aus für C++, aber wird Rust tatsächlich der Ersatz oder doch wieder nur der nächste erfolglose Versuch, C++ vom Thron zu stossen? Mein Fazit: Rust ist C überlegen, aber es gibt nicht für alle Plattformen einen Rust-Compiler.
Gegenüber C++ gibt es aus technischer Sicht zurzeit keinen klaren Gewinner. Scheitern wird Rust wahrscheinlich wegen eines Fetischs bei der Personalsuche: Mindestens drei Jahre Berufserfahrung! Nur woher?
Embedded Computing Conference am 28.5.2024
Ersetzt Rust bald C++ oder bleibt es beim erfolglosen Versuch? Diese Frage werde ich meinen Zuhörern an der Embedded Computing Conference (ECC) am 28. Mai 2024 um 11.30 Uhr im Stream 2 stellen. Sie sind herzlich eingeladen, mit meinen Kollegen und mir am Stand von bbv Software Services darüber ins Gespräch zu kommen.
Der Autor
Martin König
Martin König ist Senior Software-Ingenieur für Embedded Software im Bereich Industrie- und Medizintechnik. Sein Fokus liegt auf sicherer und wartungsarmer Architektur und Programmierung. Ein starkes Interesse hat er an ordentlicher Dokumentation – seit einiger Zeit auch unter Benutzung von Generativer Künstlicher Intelligenz.