Ich schaue mir z.Zt. eine Vorlesungsreihe über die Programmiersprache Rust auf Youtube an und bin hellauf begeistert. Programmiersprachen sind ja oft auch Geschmackssache und sowohl Interpretersprachen als auch rein objektorientiere Sprachen waren nie mein Geschmack. Natürlich sind Konzepte wie Datenkapselung, Verknüpfung von Methoden/Funktionen mit ihren Datenstrukturen und Polymorphie die guten Seiten von Objektorientierung. Vererbung finde ich aber ein Graus. Wenn ich mich nach mehrfacher Vererbung durch die komplette Klassenhierarchie nach oben hangeln muss, um den Code zu verstehen, steige ich aus. Außerdem habe ich gerne ein lauffähiges Kompilat ohne eine entsprechende Laufzeitumgebung haben zu müssen, mit all den Probleme (falsche Python-Version, läuft nur mit Java 21 etc.). Und schnelle Programme sind natürlich auch nie falsch.
Rust ist eine Multiparadigmen-Systemprogrammiersprache, die die – wie ich finde – besten Konzepte aus anderen Programmiersprachen übernimmt. Es gibt Objektorientierung ohne Vererbung, es gibt Funktionsvariablen (Funktionen in Variablen, die auch an andere Funktionen übergeben werden können) aus der funktionalen Programmierung etc.
Was mir sehr gefällt ist das „Zero-Overhead-Konzept“, d.h. Rust bietet bei maximaler Abstraktion dennoch das Laufzeitverhalten von C oder C++. Daher gibt es keinen Garbage-Kollektor und trotzdem Schutz (zur Kompilationszeit!) vor all den Tücken der Speicherverwaltung wie Null-Dereferenzierung, Race Conditions, Speicherlecks etc. durch ein strenges Owner-/Borrow/Lifetime-Konzept, was Variablen angeht. Speicher wird genau dann freigegeben, wenn der Owner einer Datenstruktur (also die „besitzende“ Variable und davon gibt es zu einer bestimmten Zeit stets nur eine!), aus dem Sichtbarkeitsbereich fällt.
Es gibt übrigens auch kein „null“, „none“, „nil“ oder sonstige Krücken und somit stets nur gültige Zeiger/Referenzen. Das Owner/Borrow/Lifetime-Konzept macht einem klar, warum es in anderen Programmiersprachen so oft zu Race Conditions kommt: Weil diese Sprachen es erlauben, Unfug zu programmieren, man muss es so sagen! In Rust haut einem der Compiler sowas um die Ohren, wobei die Fehlermeldungen des Compilers exzellent sind, sogar ein Lösungsvorschlag für ein Problem wird vom Compiler oft vorgeschlagen!
Mit „cargo“ gibt es ein(e) standardisierte(s) Paketverwaltung/Build-Tool, was recht einfach ist, die Konfiguration ist in TOML geschrieben. Modules/Crates sind ebenfalls einfach zu verstehen.
Was ebenfalls super ist: Braucht man mal komplette „Kontrolle“ für systemnahe Dinge, so kann man einen Block mit „unsafe {}“ markieren und kann dann alle Schweinereien machen, die man in C/C++ auch machen könnte, das sogar gemischt mit normalen Code im selben Quelltext-File!
Ich bin erst noch bei den grundlegenden Konzepten und die Lernkurve ist steil, keine Frage, aber Rust macht Spaß und ist erfrischend anders. Wer das interessant findet, sollte sich Rust unbedingt mal anschauen!