Rust kann Einiges, was andere Programmiersprachen nicht können.AL-art/Shutterstock Geht es darum, eine Programmiersprache zu wählen, haben Entwickler zwar die Wahl, wie sie ihre Prioritäten setzen. Allerdings müssen sie sich entscheiden zwischen: Programmiersprachen, die auf Komfort und Sicherheit fokussieren, in der Regel aber nicht schnell sind (wie Python), und Sprachen, bei denen die Performance im Vordergrund steht, die dafür jedoch oft komplex anzuwenden sind (wie C und C++). Ganz anders Rust: Die Programmiersprache stellt Devs in Aussicht, Geschwindigkeit, Sicherheit und Benutzerfreundlichkeit unter einen Nenner zu bekommen. Unter dem Strich will Rust besseren Code bei weniger Kompromissen realisieren. In diesem Artikel lesen Sie, welche Vor- und Nachteile daraus erwachsen, mit Rust zu programmieren. Zuvor blicken wir jedoch in aller Kürze darauf zurück, wie die Programmiersprache entstanden ist. Die Anfänge von Rust Rust nahm seinen Anfang als Forschungsprojekt bei der Mozilla Foundation. Das ursprüngliche Ziel des Projekts bestand dabei darin, Schlüsselkomponenten des Firefox-Browsers neu zu implementieren, um die Fähigkeiten von Multicore-Prozessoren besser nutzen zu können – ohne dabei Kompromisse bei der Sicherheit einzugehen. Weil Software aber in jedem Fall schnell und sicher sein sollte, entwickelte sich Rust schnell von einem Browser-Komponenten- zu einem vollumfänglichen Programmiersprachen-Projekt. Heute zählt Rust laut dem Tiobe Index zu den 15 populärsten Coding-Sprachen (Stand: November 2024). Besonders beliebt ist Rust, wenn es darum geht, die nächste Generation nativer Applikationen und Bare-Metal-Lösungen zu entwickeln. Das ist auch darauf zurückzuführen, dass die Sprache sowohl eine eigene Toolchain als auch ein eigenes Komponenten-Management-System bereitstellt. Mit Rust programmieren – die Vorteile Ganz allgemein können Entwickler, die mit Rust programmieren, sich folgende Vorteile zunutze machen: 1. Speed Rust-Code kompiliert über verschiedene Plattformen hinweg zu nativem Maschinencode. Binärdateien sind in sich geschlossen und abgesehen davon, was das Betriebssystem (eventuell) bereitstellt, existiert keine externe Laufzeitumgebung. Der so generierte Code verspricht genauso leistungsfähig zu sein, wie vergleichbarer in C oder C++. 2. Memory-safe Rust kompiliert keine Programme, die versuchen, den Speicher „Unsafe“ zu nutzen. Die Syntax und die Sprachmetaphern von Rust stellen sicher, dass häufig auftretende, Memory-bezogene Probleme, wie sie in anderen Sprachen vorkommen (etwa Null- oder Dangling-Pointer oder Data Races) gar nicht erst in Produktionsumgebungen gelangen. Der Rust-Compiler kennzeichnet diese und erzwingt es, sie zu beheben, bevor Programme ausgeführt werden. 3. Memory Management ohne viel Overhead Die Speicherverwaltung wird in Rust über strikte Regeln gesteuert. Ausgedrückt wird das Memory-Management-System von Rust in der Syntax der Sprache – durch die Metapher der „Ownership“. Jede beliebige Value innerhalb von Rust kann jeweils nur von einer einzelnen Variablen ge-“owned“ – respektive gehalten oder verändert – werden. Über die Ownership-Metapher werden sämtliche Speichereinheiten in einem Rust-Programm automatisch getrackt und freigegeben. Die Art und Weise, wie die Ownership dabei zwischen Objekten übertragen wird, regelt ausschließlich der Compiler. Das verhindert „Überraschungen“ zur Laufzeit, etwa in Form von Speicherzuweisungsfehlern. Der Ownership-Ansatz hat auch zur Folge, dass Rust im Gegensatz zu Sprachen wie Go oder C# keine Garbage Collection benötigt (was wiederum der Performance zuträglich ist). 4. Flexibles Sicherheitsmodell Auch bei Rust lassen sich Sicherheitsfunktionen teilweise aussetzen, wenn direkte Veränderungen am Speicher nötig werden – beispielsweise, um Raw Pointer zu dereferenzieren. Die Betonung liegt dabei auf „teilweise“, denn vollständig deaktivierbar sind die Memory-Safety-Prozesse von Rust nicht. Für gängige Anwendungsfälle sollte das jedoch kein Problem darstellen. Unter dem Strich steht (standardmäßig) sicherere Software. 5. Funktioniert plattformübergreifend Rust läuft sowohl auf Linux als auch auf Windows und macOS – unter anderem. Cross Compilation oder Binaries für andere Architekturen oder Plattformen zu produzieren, geht mit einem gewissen Mehraufwand einher. Der ist aber vergleichsweise überschaubar gehalten. Schließlich besteht eines der Rust-Prinzipien darin, den Aufwand für Tasks dieser Art zu minimieren. 6. Simpel zu implementieren Sicherheits- und Integritätsfunktionen bringen nicht viel, wenn sie nicht genutzt werden. Deshalb haben die Rust-Entwickler und die -Community versucht, die Sprache so nützlich und einladend wie möglich zu gestalten. Das Ziel: Rust soll sowohl für Neueinsteiger als auch für erfahrene Entwickler attraktiv sein. Alles was nötig ist, um Rust-Binärdateien zu erstellen, ist bereits im Paket enthalten. Externe Compiler wie GCC werden nur benötigt, um andere Komponenten außerhalb des Rust-Ökosystems zu kompilieren. Auch Windows-Benutzer sind hier keine „Bürger zweiter Klasse“: Die Rust-Toolchain ist unter dem Microsoft-Betriebssystem ebenso leistungsfähig wie unter Linux und macOS. 7. Performante Sprachfunktionen Entwickler wollen im Regelfall nicht in eine neue Sprache einsteigen, nur um dann beim Blick auf die gebotenen Funktionen der Ernüchterung zu erliegen. Das kann bei Rust nicht passieren, vorteilhaften, nativen Sprachfunktionen sei Dank. Dazu zählen zum Beispiel: Makros, Generics, Pattern Matching und Composition (über „Traits“). Einige Funktionen wie Inline-Assembler sind ebenfalls verfügbar, allerdings unter dem Unsafe-Label. 8. Nützliche Standardbibliothek Die Standardbibliothek von Rust bietet Entwicklern diverse Möglichkeiten. Zum Beispiel, um: Container, Collections und Iterators zu verwenden, Strings zu bearbeiten, oder Prozesse und Threads zu managen. Weil Rust plattformübergreifend konzipiert ist, enthält seine Standardbibliothek nur Dinge, die zuverlässig portiert werden können. Support für plattformspezifische Funktionen wie epoll (Linux) muss deshalb über Drittanbieter-Bibliotheken wie libc, mio oder tokio bezogen werden. Darüber hinaus lässt sich Rust auch unabhängig von seiner Standardbibliothek nutzen. Das ist beispielsweise nützlich, um Binaries ohne Plattformabhängigkeiten zu erstellen, beispielsweise für Embedded Systems oder einen Betriebssystem-Kernel. 9. Viele Drittanbieter-Bibliotheken Der Nutzwert einer Programmiersprache bemisst sich auch danach, welche Möglichkeiten über Drittanbieter offenstehen. Third-Party-Bibliotheken heißen bei Rust „Crates“ und stehen zum Beispiel über das offizielle Repository zur Verfügung. Über mangelnde Auswahl dürfte sich bei mehr als 163.000 Crates niemand so schnell beschweren. 10. Umfassender IDE-Support Das Team hinter Rust hat den Rust Language Server entwickelt. Dieser sendet Live-Feedback vom Rust-Compiler an die ihrer Wahl – zum Beispiel Microsoft Visual Studio (Code). loading=”lazy” width=”400px”>Visual Studio Code bietet umfassenden Rust-Support.IDG Mit Rust entwickeln – die Nachteile Neben den genannten Vorteilen bringt es jedoch auch einige Nachteile mit, sich auf Rust einzulassen. Auch an dieser Stelle bleibt die Programmiersprache ihrer Linie treu: Die potenziellen Probleme können sowohl Einsteiger als auch alte Hasen ereilen. 1. Rust ist noch jung Rust wurde erst im Jahr 2015 in Version 1.0 veröffentlicht. Während also ein Großteil der Syntax und Funktionalität der Kernsprache festgeschrieben wurde, sind viele andere Dinge noch weit weniger definiert. Zum Beispiel sind asynchrone Prozesse noch „Work in Progress“. Bis es soweit ist, müssen Komponenten von Drittanbietern reichen. 2. Steile Lernkurve Das größte Hindernis bei Rust besteht wohl darin, seine Metaphern zu verstehen. Ownership, Borrowing und andere Memory-Management-Fallen bringen jeden Rust-Dev zuerst einmal ins Schlingern. Ein gängiger Initiationsritus für neue Rust-Programmierer ist der Kampf gegen den „Borrow Checker“. Dabei erfahren die Neulinge aus erster Hand, wie akribisch der Rust-Compiler veränderbare und unveränderbare Dinge voneinander trennt. 3. Rust ist komplex Auch wegen seines (im Vergleich zu anderen Sprachen) ausführlicheren Codes ist Rust vergleichsweise schwer zu erlernen. Um Strings zu verketten, reicht in Rust ein simples string1+string2 nicht aus. Schließlich kann ein Objekt veränderbar, das andere unveränderbar sein. Rust verlangt von Programmierern zu definieren, wie mit solchen Dingen umzugehen ist – statt den Compiler raten zu lassen. 4. Rust ist eine Systemsprache Weil Rust direkte Eingriffe in den Speicher ermöglicht, kann es wie wie C und C++ dazu genutzt werden, Software auf Systemebene zu entwickeln. Das kann in manchen Fällen aber zuviel des Guten sein: Für hauptsächlich E/A-gebundene Tasks oder solche, die keine Geschwindigkeit auf Maschinenebene benötigen, ist Rust unter Umständen nicht optimal. Die Rechnung ist einfach: Ein Python-Skript, das in fünf Minuten geschrieben ist und eine Sekunde Execution-Zeit benötigt, bringt mehr als ein Rust-Programm, das in einer halben Stunde entsteht und in einer Hundertstelsekunde ausgeführt wird. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!
Was ist Rust?
Rust kann Einiges, was andere Programmiersprachen nicht können.AL-art/Shutterstock Geht es darum, eine Programmiersprache zu wählen, haben Entwickler zwar die Wahl, wie sie ihre Prioritäten setzen. Allerdings müssen sie sich entscheiden zwischen: Programmiersprachen, die auf Komfort und Sicherheit fokussieren, in der Regel aber nicht schnell sind (wie Python), und Sprachen, bei denen die Performance im Vordergrund steht, die dafür jedoch oft komplex anzuwenden sind (wie C und C++). Ganz anders Rust: Die Programmiersprache stellt Devs in Aussicht, Geschwindigkeit, Sicherheit und Benutzerfreundlichkeit unter einen Nenner zu bekommen. Unter dem Strich will Rust besseren Code bei weniger Kompromissen realisieren. In diesem Artikel lesen Sie, welche Vor- und Nachteile daraus erwachsen, mit Rust zu programmieren. Zuvor blicken wir jedoch in aller Kürze darauf zurück, wie die Programmiersprache entstanden ist. Die Anfänge von Rust Rust nahm seinen Anfang als Forschungsprojekt bei der Mozilla Foundation. Das ursprüngliche Ziel des Projekts bestand dabei darin, Schlüsselkomponenten des Firefox-Browsers neu zu implementieren, um die Fähigkeiten von Multicore-Prozessoren besser nutzen zu können – ohne dabei Kompromisse bei der Sicherheit einzugehen. Weil Software aber in jedem Fall schnell und sicher sein sollte, entwickelte sich Rust schnell von einem Browser-Komponenten- zu einem vollumfänglichen Programmiersprachen-Projekt. Heute zählt Rust laut dem Tiobe Index zu den 15 populärsten Coding-Sprachen (Stand: November 2024). Besonders beliebt ist Rust, wenn es darum geht, die nächste Generation nativer Applikationen und Bare-Metal-Lösungen zu entwickeln. Das ist auch darauf zurückzuführen, dass die Sprache sowohl eine eigene Toolchain als auch ein eigenes Komponenten-Management-System bereitstellt. Mit Rust programmieren – die Vorteile Ganz allgemein können Entwickler, die mit Rust programmieren, sich folgende Vorteile zunutze machen: 1. Speed Rust-Code kompiliert über verschiedene Plattformen hinweg zu nativem Maschinencode. Binärdateien sind in sich geschlossen und abgesehen davon, was das Betriebssystem (eventuell) bereitstellt, existiert keine externe Laufzeitumgebung. Der so generierte Code verspricht genauso leistungsfähig zu sein, wie vergleichbarer in C oder C++. 2. Memory-safe Rust kompiliert keine Programme, die versuchen, den Speicher „Unsafe“ zu nutzen. Die Syntax und die Sprachmetaphern von Rust stellen sicher, dass häufig auftretende, Memory-bezogene Probleme, wie sie in anderen Sprachen vorkommen (etwa Null- oder Dangling-Pointer oder Data Races) gar nicht erst in Produktionsumgebungen gelangen. Der Rust-Compiler kennzeichnet diese und erzwingt es, sie zu beheben, bevor Programme ausgeführt werden. 3. Memory Management ohne viel Overhead Die Speicherverwaltung wird in Rust über strikte Regeln gesteuert. Ausgedrückt wird das Memory-Management-System von Rust in der Syntax der Sprache – durch die Metapher der „Ownership“. Jede beliebige Value innerhalb von Rust kann jeweils nur von einer einzelnen Variablen ge-“owned“ – respektive gehalten oder verändert – werden. Über die Ownership-Metapher werden sämtliche Speichereinheiten in einem Rust-Programm automatisch getrackt und freigegeben. Die Art und Weise, wie die Ownership dabei zwischen Objekten übertragen wird, regelt ausschließlich der Compiler. Das verhindert „Überraschungen“ zur Laufzeit, etwa in Form von Speicherzuweisungsfehlern. Der Ownership-Ansatz hat auch zur Folge, dass Rust im Gegensatz zu Sprachen wie Go oder C# keine Garbage Collection benötigt (was wiederum der Performance zuträglich ist). 4. Flexibles Sicherheitsmodell Auch bei Rust lassen sich Sicherheitsfunktionen teilweise aussetzen, wenn direkte Veränderungen am Speicher nötig werden – beispielsweise, um Raw Pointer zu dereferenzieren. Die Betonung liegt dabei auf „teilweise“, denn vollständig deaktivierbar sind die Memory-Safety-Prozesse von Rust nicht. Für gängige Anwendungsfälle sollte das jedoch kein Problem darstellen. Unter dem Strich steht (standardmäßig) sicherere Software. 5. Funktioniert plattformübergreifend Rust läuft sowohl auf Linux als auch auf Windows und macOS – unter anderem. Cross Compilation oder Binaries für andere Architekturen oder Plattformen zu produzieren, geht mit einem gewissen Mehraufwand einher. Der ist aber vergleichsweise überschaubar gehalten. Schließlich besteht eines der Rust-Prinzipien darin, den Aufwand für Tasks dieser Art zu minimieren. 6. Simpel zu implementieren Sicherheits- und Integritätsfunktionen bringen nicht viel, wenn sie nicht genutzt werden. Deshalb haben die Rust-Entwickler und die -Community versucht, die Sprache so nützlich und einladend wie möglich zu gestalten. Das Ziel: Rust soll sowohl für Neueinsteiger als auch für erfahrene Entwickler attraktiv sein. Alles was nötig ist, um Rust-Binärdateien zu erstellen, ist bereits im Paket enthalten. Externe Compiler wie GCC werden nur benötigt, um andere Komponenten außerhalb des Rust-Ökosystems zu kompilieren. Auch Windows-Benutzer sind hier keine „Bürger zweiter Klasse“: Die Rust-Toolchain ist unter dem Microsoft-Betriebssystem ebenso leistungsfähig wie unter Linux und macOS. 7. Performante Sprachfunktionen Entwickler wollen im Regelfall nicht in eine neue Sprache einsteigen, nur um dann beim Blick auf die gebotenen Funktionen der Ernüchterung zu erliegen. Das kann bei Rust nicht passieren, vorteilhaften, nativen Sprachfunktionen sei Dank. Dazu zählen zum Beispiel: Makros, Generics, Pattern Matching und Composition (über „Traits“). Einige Funktionen wie Inline-Assembler sind ebenfalls verfügbar, allerdings unter dem Unsafe-Label. 8. Nützliche Standardbibliothek Die Standardbibliothek von Rust bietet Entwicklern diverse Möglichkeiten. Zum Beispiel, um: Container, Collections und Iterators zu verwenden, Strings zu bearbeiten, oder Prozesse und Threads zu managen. Weil Rust plattformübergreifend konzipiert ist, enthält seine Standardbibliothek nur Dinge, die zuverlässig portiert werden können. Support für plattformspezifische Funktionen wie epoll (Linux) muss deshalb über Drittanbieter-Bibliotheken wie libc, mio oder tokio bezogen werden. Darüber hinaus lässt sich Rust auch unabhängig von seiner Standardbibliothek nutzen. Das ist beispielsweise nützlich, um Binaries ohne Plattformabhängigkeiten zu erstellen, beispielsweise für Embedded Systems oder einen Betriebssystem-Kernel. 9. Viele Drittanbieter-Bibliotheken Der Nutzwert einer Programmiersprache bemisst sich auch danach, welche Möglichkeiten über Drittanbieter offenstehen. Third-Party-Bibliotheken heißen bei Rust „Crates“ und stehen zum Beispiel über das offizielle Repository zur Verfügung. Über mangelnde Auswahl dürfte sich bei mehr als 163.000 Crates niemand so schnell beschweren. 10. Umfassender IDE-Support Das Team hinter Rust hat den Rust Language Server entwickelt. Dieser sendet Live-Feedback vom Rust-Compiler an die ihrer Wahl – zum Beispiel Microsoft Visual Studio (Code). loading="lazy" width="400px">Visual Studio Code bietet umfassenden Rust-Support.IDG Mit Rust entwickeln – die Nachteile Neben den genannten Vorteilen bringt es jedoch auch einige Nachteile mit, sich auf Rust einzulassen. Auch an dieser Stelle bleibt die Programmiersprache ihrer Linie treu: Die potenziellen Probleme können sowohl Einsteiger als auch alte Hasen ereilen. 1. Rust ist noch jung Rust wurde erst im Jahr 2015 in Version 1.0 veröffentlicht. Während also ein Großteil der Syntax und Funktionalität der Kernsprache festgeschrieben wurde, sind viele andere Dinge noch weit weniger definiert. Zum Beispiel sind asynchrone Prozesse noch „Work in Progress“. Bis es soweit ist, müssen Komponenten von Drittanbietern reichen. 2. Steile Lernkurve Das größte Hindernis bei Rust besteht wohl darin, seine Metaphern zu verstehen. Ownership, Borrowing und andere Memory-Management-Fallen bringen jeden Rust-Dev zuerst einmal ins Schlingern. Ein gängiger Initiationsritus für neue Rust-Programmierer ist der Kampf gegen den „Borrow Checker“. Dabei erfahren die Neulinge aus erster Hand, wie akribisch der Rust-Compiler veränderbare und unveränderbare Dinge voneinander trennt. 3. Rust ist komplex Auch wegen seines (im Vergleich zu anderen Sprachen) ausführlicheren Codes ist Rust vergleichsweise schwer zu erlernen. Um Strings zu verketten, reicht in Rust ein simples string1+string2 nicht aus. Schließlich kann ein Objekt veränderbar, das andere unveränderbar sein. Rust verlangt von Programmierern zu definieren, wie mit solchen Dingen umzugehen ist – statt den Compiler raten zu lassen. 4. Rust ist eine Systemsprache Weil Rust direkte Eingriffe in den Speicher ermöglicht, kann es wie wie C und C++ dazu genutzt werden, Software auf Systemebene zu entwickeln. Das kann in manchen Fällen aber zuviel des Guten sein: Für hauptsächlich E/A-gebundene Tasks oder solche, die keine Geschwindigkeit auf Maschinenebene benötigen, ist Rust unter Umständen nicht optimal. Die Rechnung ist einfach: Ein Python-Skript, das in fünf Minuten geschrieben ist und eine Sekunde Execution-Zeit benötigt, bringt mehr als ein Rust-Programm, das in einer halben Stunde entsteht und in einer Hundertstelsekunde ausgeführt wird. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!
Was ist Rust? Rust kann Einiges, was andere Programmiersprachen nicht können.AL-art/Shutterstock Geht es darum, eine Programmiersprache zu wählen, haben Entwickler zwar die Wahl, wie sie ihre Prioritäten setzen. Allerdings müssen sie sich entscheiden zwischen: Programmiersprachen, die auf Komfort und Sicherheit fokussieren, in der Regel aber nicht schnell sind (wie Python), und Sprachen, bei denen die Performance im Vordergrund steht, die dafür jedoch oft komplex anzuwenden sind (wie C und C++). Ganz anders Rust: Die Programmiersprache stellt Devs in Aussicht, Geschwindigkeit, Sicherheit und Benutzerfreundlichkeit unter einen Nenner zu bekommen. Unter dem Strich will Rust besseren Code bei weniger Kompromissen realisieren. In diesem Artikel lesen Sie, welche Vor- und Nachteile daraus erwachsen, mit Rust zu programmieren. Zuvor blicken wir jedoch in aller Kürze darauf zurück, wie die Programmiersprache entstanden ist. Die Anfänge von Rust Rust nahm seinen Anfang als Forschungsprojekt bei der Mozilla Foundation. Das ursprüngliche Ziel des Projekts bestand dabei darin, Schlüsselkomponenten des Firefox-Browsers neu zu implementieren, um die Fähigkeiten von Multicore-Prozessoren besser nutzen zu können – ohne dabei Kompromisse bei der Sicherheit einzugehen. Weil Software aber in jedem Fall schnell und sicher sein sollte, entwickelte sich Rust schnell von einem Browser-Komponenten- zu einem vollumfänglichen Programmiersprachen-Projekt. Heute zählt Rust laut dem Tiobe Index zu den 15 populärsten Coding-Sprachen (Stand: November 2024). Besonders beliebt ist Rust, wenn es darum geht, die nächste Generation nativer Applikationen und Bare-Metal-Lösungen zu entwickeln. Das ist auch darauf zurückzuführen, dass die Sprache sowohl eine eigene Toolchain als auch ein eigenes Komponenten-Management-System bereitstellt. Mit Rust programmieren – die Vorteile Ganz allgemein können Entwickler, die mit Rust programmieren, sich folgende Vorteile zunutze machen: 1. Speed Rust-Code kompiliert über verschiedene Plattformen hinweg zu nativem Maschinencode. Binärdateien sind in sich geschlossen und abgesehen davon, was das Betriebssystem (eventuell) bereitstellt, existiert keine externe Laufzeitumgebung. Der so generierte Code verspricht genauso leistungsfähig zu sein, wie vergleichbarer in C oder C++. 2. Memory-safe Rust kompiliert keine Programme, die versuchen, den Speicher „Unsafe“ zu nutzen. Die Syntax und die Sprachmetaphern von Rust stellen sicher, dass häufig auftretende, Memory-bezogene Probleme, wie sie in anderen Sprachen vorkommen (etwa Null- oder Dangling-Pointer oder Data Races) gar nicht erst in Produktionsumgebungen gelangen. Der Rust-Compiler kennzeichnet diese und erzwingt es, sie zu beheben, bevor Programme ausgeführt werden. 3. Memory Management ohne viel Overhead Die Speicherverwaltung wird in Rust über strikte Regeln gesteuert. Ausgedrückt wird das Memory-Management-System von Rust in der Syntax der Sprache – durch die Metapher der „Ownership“. Jede beliebige Value innerhalb von Rust kann jeweils nur von einer einzelnen Variablen ge-“owned“ – respektive gehalten oder verändert – werden. Über die Ownership-Metapher werden sämtliche Speichereinheiten in einem Rust-Programm automatisch getrackt und freigegeben. Die Art und Weise, wie die Ownership dabei zwischen Objekten übertragen wird, regelt ausschließlich der Compiler. Das verhindert „Überraschungen“ zur Laufzeit, etwa in Form von Speicherzuweisungsfehlern. Der Ownership-Ansatz hat auch zur Folge, dass Rust im Gegensatz zu Sprachen wie Go oder C# keine Garbage Collection benötigt (was wiederum der Performance zuträglich ist). 4. Flexibles Sicherheitsmodell Auch bei Rust lassen sich Sicherheitsfunktionen teilweise aussetzen, wenn direkte Veränderungen am Speicher nötig werden – beispielsweise, um Raw Pointer zu dereferenzieren. Die Betonung liegt dabei auf „teilweise“, denn vollständig deaktivierbar sind die Memory-Safety-Prozesse von Rust nicht. Für gängige Anwendungsfälle sollte das jedoch kein Problem darstellen. Unter dem Strich steht (standardmäßig) sicherere Software. 5. Funktioniert plattformübergreifend Rust läuft sowohl auf Linux als auch auf Windows und macOS – unter anderem. Cross Compilation oder Binaries für andere Architekturen oder Plattformen zu produzieren, geht mit einem gewissen Mehraufwand einher. Der ist aber vergleichsweise überschaubar gehalten. Schließlich besteht eines der Rust-Prinzipien darin, den Aufwand für Tasks dieser Art zu minimieren. 6. Simpel zu implementieren Sicherheits- und Integritätsfunktionen bringen nicht viel, wenn sie nicht genutzt werden. Deshalb haben die Rust-Entwickler und die -Community versucht, die Sprache so nützlich und einladend wie möglich zu gestalten. Das Ziel: Rust soll sowohl für Neueinsteiger als auch für erfahrene Entwickler attraktiv sein. Alles was nötig ist, um Rust-Binärdateien zu erstellen, ist bereits im Paket enthalten. Externe Compiler wie GCC werden nur benötigt, um andere Komponenten außerhalb des Rust-Ökosystems zu kompilieren. Auch Windows-Benutzer sind hier keine „Bürger zweiter Klasse“: Die Rust-Toolchain ist unter dem Microsoft-Betriebssystem ebenso leistungsfähig wie unter Linux und macOS. 7. Performante Sprachfunktionen Entwickler wollen im Regelfall nicht in eine neue Sprache einsteigen, nur um dann beim Blick auf die gebotenen Funktionen der Ernüchterung zu erliegen. Das kann bei Rust nicht passieren, vorteilhaften, nativen Sprachfunktionen sei Dank. Dazu zählen zum Beispiel: Makros, Generics, Pattern Matching und Composition (über „Traits“). Einige Funktionen wie Inline-Assembler sind ebenfalls verfügbar, allerdings unter dem Unsafe-Label. 8. Nützliche Standardbibliothek Die Standardbibliothek von Rust bietet Entwicklern diverse Möglichkeiten. Zum Beispiel, um: Container, Collections und Iterators zu verwenden, Strings zu bearbeiten, oder Prozesse und Threads zu managen. Weil Rust plattformübergreifend konzipiert ist, enthält seine Standardbibliothek nur Dinge, die zuverlässig portiert werden können. Support für plattformspezifische Funktionen wie epoll (Linux) muss deshalb über Drittanbieter-Bibliotheken wie libc, mio oder tokio bezogen werden. Darüber hinaus lässt sich Rust auch unabhängig von seiner Standardbibliothek nutzen. Das ist beispielsweise nützlich, um Binaries ohne Plattformabhängigkeiten zu erstellen, beispielsweise für Embedded Systems oder einen Betriebssystem-Kernel. 9. Viele Drittanbieter-Bibliotheken Der Nutzwert einer Programmiersprache bemisst sich auch danach, welche Möglichkeiten über Drittanbieter offenstehen. Third-Party-Bibliotheken heißen bei Rust „Crates“ und stehen zum Beispiel über das offizielle Repository zur Verfügung. Über mangelnde Auswahl dürfte sich bei mehr als 163.000 Crates niemand so schnell beschweren. 10. Umfassender IDE-Support Das Team hinter Rust hat den Rust Language Server entwickelt. Dieser sendet Live-Feedback vom Rust-Compiler an die ihrer Wahl – zum Beispiel Microsoft Visual Studio (Code). loading="lazy" width="400px">Visual Studio Code bietet umfassenden Rust-Support.IDG Mit Rust entwickeln – die Nachteile Neben den genannten Vorteilen bringt es jedoch auch einige Nachteile mit, sich auf Rust einzulassen. Auch an dieser Stelle bleibt die Programmiersprache ihrer Linie treu: Die potenziellen Probleme können sowohl Einsteiger als auch alte Hasen ereilen. 1. Rust ist noch jung Rust wurde erst im Jahr 2015 in Version 1.0 veröffentlicht. Während also ein Großteil der Syntax und Funktionalität der Kernsprache festgeschrieben wurde, sind viele andere Dinge noch weit weniger definiert. Zum Beispiel sind asynchrone Prozesse noch „Work in Progress“. Bis es soweit ist, müssen Komponenten von Drittanbietern reichen. 2. Steile Lernkurve Das größte Hindernis bei Rust besteht wohl darin, seine Metaphern zu verstehen. Ownership, Borrowing und andere Memory-Management-Fallen bringen jeden Rust-Dev zuerst einmal ins Schlingern. Ein gängiger Initiationsritus für neue Rust-Programmierer ist der Kampf gegen den „Borrow Checker“. Dabei erfahren die Neulinge aus erster Hand, wie akribisch der Rust-Compiler veränderbare und unveränderbare Dinge voneinander trennt. 3. Rust ist komplex Auch wegen seines (im Vergleich zu anderen Sprachen) ausführlicheren Codes ist Rust vergleichsweise schwer zu erlernen. Um Strings zu verketten, reicht in Rust ein simples string1+string2 nicht aus. Schließlich kann ein Objekt veränderbar, das andere unveränderbar sein. Rust verlangt von Programmierern zu definieren, wie mit solchen Dingen umzugehen ist – statt den Compiler raten zu lassen. 4. Rust ist eine Systemsprache Weil Rust direkte Eingriffe in den Speicher ermöglicht, kann es wie wie C und C++ dazu genutzt werden, Software auf Systemebene zu entwickeln. Das kann in manchen Fällen aber zuviel des Guten sein: Für hauptsächlich E/A-gebundene Tasks oder solche, die keine Geschwindigkeit auf Maschinenebene benötigen, ist Rust unter Umständen nicht optimal. Die Rechnung ist einfach: Ein Python-Skript, das in fünf Minuten geschrieben ist und eine Sekunde Execution-Zeit benötigt, bringt mehr als ein Rust-Programm, das in einer halben Stunde entsteht und in einer Hundertstelsekunde ausgeführt wird. (fm) Sie wollen weitere interessante Beiträge zu diversen Themen aus der IT-Welt lesen? Unsere kostenlosen Newsletter liefern Ihnen alles, was IT-Profis wissen sollten – direkt in Ihre Inbox!