Rust oder Python? Am besten beides
Wie Sie Geschwindigkeit in Ihre Datenprojekte bringen
Python ist seit Jahren die beliebteste Programmiersprache unter Data Scientists und Machine Learning Engineers. Doch sie bekommt Konkurrenz. Mit Rust erfreut sich eine relativ junge Programmiersprache immer größerer Beliebtheit. Selbst auf der PyCon & PyData 2023 – also DER Konferenz für Python Fans – zeigten mehrere Vorträge die Vorteile von Rust auf.
Es ist also höchste Zeit, sich mit der neuen Programmiersprache zu beschäftigen – und ihre Vor- und Nachteile für Data-Science-Projekte auszuloten.
Weshalb hat sich Python im Bereich Data Science bewährt?
Die Frage, warum Python bei Data Scientists und viele anderen so beliebt ist, ist schnell beantwortet: Weil es so einfach ist. Mit ihrer einfachen Syntax ist Python die ideale Programmiersprache für Einsteiger:innen. Darüber hinaus ermöglicht sie eine schnellere Entwicklung: Mit Python können Programme in weniger Codezeilen geschrieben werden als in anderen Sprachen.
Die wichtigsten Vorteile von Python im Überblick:
- Dynamische Typisierung: In Python müssen Variablentypen nicht vorab definiert werden, da der sogenannte Interpreter diese von alleine erkennt. Der Datentyp einer Variable kann sich sogar ändern, was bei anderen Programmiersprachen zu sofortigen Fehlern führen würde. Die dynamische Typisierung bedeutet zwar mehr Arbeit für den Computer, aber deutlich weniger Aufwand für die Entwickler:innen.
- Wiederverwendbare Pakete und Module: Python ermöglicht die Nutzung einer Vielzahl von Paketen, Modulen und Bibliotheken. So muss man nicht alles neu entwickeln, sondern kann auf die Arbeit anderer Programmierer:innen zurückgreifen.
- Große Community: Es ist ein sich selbst verstärkender Effekt. Je mehr Menschen Python nutzen, desto mehr wiederverwendbaren Code gibt es und desto schneller bekommen Entwickler:innen Tipps und Unterstützung von der riesigen Community. Das macht die Programmiersprache umso beliebter – und noch mehr Menschen nutzen sie.
- Nutzung mit Jupyter Notebook: Wer Python zusammen mit Jupyter Notebooks nutzt, macht seine Datenprojekte sogar noch einfacher. Die Möglichkeit, jeden Teil des Codes separat auszuführen, bietet vor allem Anfänger:innen einen guten Überblick und vereinfacht das Erstellen eines ersten Prototypen.
Wo stößt Python an Grenzen?
Python ist aus den meisten Projekten rund um Data Science und maschinelles Lernen nicht mehr wegzudenken. Doch je größer die Datenmengen und je höher die Erwartungen an die Geschwindigkeit werden, desto schneller stößt die Sprache an ihre Grenzen.
Denn durch die zeilenweise Ausführung und die dynamische Typisierung ist Python nicht nur langsamer als andere Programmiersprachen, sondern verbraucht auch extrem viel Speicher. Die Tatsache, dass Variablentypen nicht vorab definiert werden, birgt außerdem ein gewisses Risiko und kann zu unerwarteten Nebenwirkungen führen.
Mehr Effizienz und Geschwindigkeit in Datenprojekte bringen
Wer mehr Effizienz und Geschwindigkeit in seine Datenprojekte bringen will, hat mehrere Möglichkeiten. Zuallererst möchte ich betonen, dass Sie Python nicht komplett über Bord werfen müssen. Denn es gibt einige Möglichkeiten, die Funktionalität Ihres Python Codes zu erhöhen.
Jens Nie hat bei der PyCon 2023 einen spannenden Vortrag dazu gehalten. Seine wichtigsten Tipps unter dem Titel "Accelerating Python" waren:
- Funktionen und lokale Variablen nutzen: Lokale Variablen sind effizienter als globale. Daher empfiehlt es sich, Funktionen zu nutzen, die ausschließlich auf lokale Variablen zurückgreifen.
- Schnellere Implementierungen: Python bringt eine Reihe von spezifischen Konstrukten mit, die den Code beschleunigen. Dazu zählen etwa "list-comprehensions", die eine kompaktere Variante der For-Schleife darstellen, und "generator expressions", die immer nur ein Objekt zur Zeit aufrufen und so den Speicher schonen (siehe auch das Kapitel Loops im Python Wiki).
- Caches nutzen: Auch Zwischenspeicher sind eine bewährte Lösung, um den Code schlanker und somit schneller zu machen. Durch die Nutzung von Caches wird auf Elemente zurückgegriffen, die bereits an anderer Stelle berechnet wurden.
- Mathematische Tricks anwenden: Ähnlich wie bei Caches können mathematische Tricks angewendet werden, um auf Bestehendes zurückzugreifen. Ein einfaches Beispiel ist die Nutzung von Symmetrien: Wenn ich 5+7 bereits ausgerechnet habe, muss ich 7+5 nicht erneut ausrechnen.
- Andere Programmiersprachen integrieren: Innerhalb von Python können Pakete genutzt werden, die auf anderen Sprachen basieren bzw. den Python Code in andere, effizientere Sprachen übersetzen. Beispiele hierfür sind Numba und Polars.
Was sind die Vor- und Nachteile von Rust?
Python lässt sich also beschleunigen. Dennoch steigen immer mehr Tech-Unternehmen – zumindest für einzelne Anwendungen – auf Rust um. Schauen wir uns also die Vor- und Nachteile der jungen Programmiersprache an.
Vorteile von Rust
- Statische Typisierung: Während ich oben die dynamische Typisierung als Vorteil von Python aufgeführt wurde, kann man das "static typing" bei Rust ebenfalls als Vorteil ansehen. Denn diese reduziert nicht nur Codefehler, sondern auch die benötigte Rechenleistung.
- Hilfreiche Fehlermeldungen: Auch wenn Rust nicht so einfach ist wie Python, bringt es im Vergleich zu Programmiersprachen wie C oder C++ einen großen Vorteil mit. Der Compiler prüft den Code bereits vor der Ausführung auf Fehler. Und wo andere Programmiersprachen nur kryptische Errors ausgeben oder gleich den Rechner abstürzen lassen, liefert Rust hilfreiche Hinweise, wie man den Fehler beheben kann.
- Speichersicherheit ohne Geschwindigkeitsverlust: Dank seines besonderen Eigentumskonzepts kommt das Memory Management von Rust ohne "garbage collector" aus. Der Compiler gewährleistet während der Übersetzung Speichersicherheit. Dadurch, dass der Compiler die Arbeit hat und nicht das Programm während der Laufzeit, kommt es zu keinerlei Geschwindigkeitseinbußen bei der Ausführung.
Nachteile von Rust
- Größerer Aufwand durch Typendefinition: Die statische Typisierung von Rust bringt zwar größere Geschwindigkeit in die Ausführung. Doch weniger Arbeit für den Computer heißt in diesem Fall: Mehr Aufwand für die Entwickler:innen.
- Weniger intuitive Nutzung: Die hilfreichen Fehlermeldungen des Compilers habe ich bereits erwähnt. Abgesehen davon würde ich aber sagen, dass Rust für Anfänger deutlich mehr Hürden bereit hält als Python. Herausfordernd wird es auch für alle, die bisher ausschließlich Python genutzt haben. Nicht nur die Typendefinition, auch Konzepte wie Intelligente Zeiger sind zumindest gewöhnungsbedürftig.
- (Noch) kleinere Community: Auch wenn Rust laut Umfragen von Stack Overflow bereits seit fünf Jahren die beliebteste Programmiersprache ist – noch ist die Rust Community deutlich kleiner als die Python Community. Das macht sich auch in den verfügbaren Bibliotheken und Paketen bemerkbar. Entwickler:innen müssen sich also darauf einstellen, mehr Elemente eigenhändig zu programmieren.
Zusammenfassung
Schaut man sich die Pros und Cons von Rust an, fällt eines auf: Die Nachteile beziehen sich hauptsächlich auf den Aufwand und die Hürden für Programmierer:innen. Rust ist weniger intuitiv als Python. Und auch, wer die Sprache perfekt beherrscht, muss sich auf größere Aufwände im Entwicklungsprozess einstellen.
Was die Performance angeht, bringt Rust hingegen deutliche Vorteile mit sich. Die statische Typisierung, der Verzicht auf den garbage collector und einige andere Aspekte sorgen dafür, dass es sich bei Rust um eine ausgesprochen sichere und zugleich effiziente Programmiersprache handelt. Genau das Richtige für die Transformation großer Datenmengen!
Rust oder Python – was ist besser für Ihr Datenprojekt?
Was ist nun also die Lösung für Datenprojekte in Ihrem Unternehmen? Alles auf Rust umstellen, die Python-Entwickler:innen rausschmeißen und durch Rust-Expert:innen austauschen?
Ich glaube, es gibt eine differenziertere Lösung. Denn während Rust sich perfekt eignet, um Datenpipelines zu beschleunigen und sicherer zu machen, ist es eine ziemliche Katastrophe, wenn es um schnelles Prototyping geht. Prototypen und MVPs sollten Sie also weiterhin in Python bauen.
Bei der Entwicklung des finalen Programms kann sich der Einsatz von Rust durchaus lohnen. Doch um dies zu ermöglichen, müssen Sie nicht gleich ein ganzes Team von Rust-Entwickler:innen einstellen. (Das würde auch schwierig, denn so viele gibt es gar nicht.)
Rust in Datenprojekten: Ausprobieren lohnt sich
Meine Empfehlung: Verordnen Sie Ihren Mitarbeiter:innen ab sofort einige Stunden Rust-Time pro Woche. Lassen Sie sie forschen und experimentieren. Denn, allen Hürden zum Trotz: Das Erlernen von Rust ist kein Hexenwerk. Und nur wer sich intensiv mit der neuen Sprache beschäftigt, kann am Ende selbst entscheiden, wo sich der Einsatz lohnt und wo nicht.
In einem bin ich mir sicher: Durch eine intelligente Kombination von Python und Rust lassen sich Datenprojekte um ein Vielfaches beschleunigen. Jetzt gilt es nur, den für Sie richtigen Weg zu finden.