Trends und Neuerungen im Python-Ökosystem Python in der Offensive
Python ist zur beliebtesten Programmiersprache der Welt aufgestiegen. Von grafischen Benutzeroberflächen über Algorithmen des maschinellen Lernens und KI-Engines bis hin zu Spielen und mobilen Apps: Immer mehr Anwendungen entstehen damit.
Bekannt für ihre leichte Lesbarkeit, eine Fülle an ausgefeilten Bibliotheken, ein lebhaftes Ökosystem und die entwicklerfreundliche Lernkurve bricht die Skriptsprache Python stets zu neuen Anwendungsszenarien auf. Python hat die begehrte erste Position im TIOBE Programming Community Index mit einem Wert von über 15 Prozent im Sommer 2022 erobert.
Der Index gilt als zuverlässiger Indikator für die Popularität von Programmiersprachen. Python ist zudem auf dem Weg, zum dritten Mal in Folge in die „Hall of Fame der Programmiersprachen“ von TIOBE aufgenommen zu werden. Diese Auszeichnung bekommt jene Sprache verliehen, die in einem Jahr den höchsten Zuwachs an Bewertungen verzeichnet hat.
Python startet durch
Python führt auch das Ranking der beliebtesten Programmiersprachen des IEEE an. Python-Code steht hoch im Kurs. Das explosive Wachstum von Datenwissenschaften und ML/KI in Kombination mit der Verfügbarkeit leistungsstarker Bibliotheken wie Tensor Flow (ML-Modellierung), NumPy (Mathematik und Statistik), Pandas (Datenanalyse), Matplotlib (Visualisierung) und anderer sowie SDKs wie Boto3 von AWS treibt die Popularität von Python in stets neue Höhen.
In der jährlichen Umfrage von StackOverflow aus dem Mai 2022 („Stackoverflow 2022 Developer Survey“) konnte sich Python unter den Teilnehmern aus der Gruppe „Learning to Code“ neben JavaScript und HTML/CSS als eine der drei beliebtesten Sprachen bewähren. An der Erhebung haben im Mai 2022 mehr als siebzigtausend Nutzer der beliebten Plattform teilgenommen.
Teilnehmer der Umfrage, die ihr Handwerk erst noch lernen, seien eigenen Aussagen zufolge mehr an Python interessiert als professionelle Entwickler mit fest eingespielten Arbeitsgewohnheiten (58 Prozent gegenüber 44 Prozent). Dasselbe Phänomen ist auch in Bezug auf C++ (35 Prozent gegenüber 20 Prozent) und C (32 Prozent gegenüber 17 Prozent) zu beobachten.
Das umgekehrte Verhältnis trifft laut Umfrage auf Sprachen wie SQL (38 Prozent vs. 53 Prozent), TypeScript (15 Prozent vs. 40 Prozent) und Bash/Shell (19 Prozent vs. 29 Prozent) zu. Python liegt gleichauf mit Rust in der Liste der meist begehrten Skript-, Programmier- und Markup-Sprachen unter all jenen Entwicklern, die damit derzeit (noch) nicht arbeiten: auf Platz eins.
Doch jede Sprache hat ihre Schwächen, so auch Python. Die Liste gravierender Missstände mag hier kurz sein, aber offenkundig. Im Großen und Ganzen ist die Ausführung zu langsam. Zum Glück mangelt es nicht an Bemühungen, diese eklatanten Leistungsdefizite zu überwinden.
Python wird schneller (na endlich!)
Python-Entwickler können schnell mit lauffähigem Code punkten, aber in Sachen Leistung ziehen sie gegenüber Programmierern der C-Sprachen noch klar den Kürzeren. Um aufzuholen, müsste Python einen guten Zahn zulegen.
Eben diesem Ziel widmet sich die Initiative Faster CPython Project, die im Jahr 2021 der Erfinder und Hauptentwickler der Sprache, Guido van Rossum (auch bekannt als BDFL bzw. Benevolent Dictator for Life), mit der Unterstützung von Microsoft gegründet hat. Im Jahre 2020 warb Microsoft ihn an, gerade einmal zwei Jahre nachdem sich der legendäre Entwickler aus der aktiven Governance der Sprache zurückgezogen hatte.
Die Vision ist, Python an die Leistung von Low-Level-Sprachen wie C oder Java heranzuführen. Die Kernentwickler halten es aber für machbar, zu schnellen Implementierungen von Skriptsprachen wie V8 für JavaScript oder luajit für lua aufzuschließen. Konkret soll die Referenzimplementierung der Sprache, CPython, in der Version 3.11 (Oktober 2022) doppelt so schnell wie sein Vorgänger sein und ihre Nachfolger innerhalb von nur vier Jahren fünfmal schneller werden.
Die Hauptbemühungen konzentrieren sich auf die Erschaffung eines „spezialisierenden, adaptiven Interpreters“, mit dem sich der Code „aggressiv, aber in einem sehr kleinen Bereich spezialisieren“ lasse und in der Lage wäre, sich „rapide und mit geringen Performance-Kosten“ aus einer fehlgeleiteten Spezialisierung heraus zu navigieren.
Numba
Eine ähnliche Lösung ist Numba, ein quelloffener JIT-Optimierungscompiler für CPython. Er nutzt die LLVM-Compiler-Infrastruktur, um Python-Syntax in Maschinencode zu kompilieren. Numba entstand mit der Finanzierung von Anaconda, einer Distribution der Programmiersprachen Python und R für wissenschaftliche Berechnungen.
Numba bietet Unterstützung für NumPy, das Hauptpaket für wissenschaftliches Computing in Python, und beschleunigt die Ausführung numerischer Python-Funktionen auf der CPU oder GPU, ist jedoch weder auf breitere Python-Anwendungsfälle ausgerichtet noch kann dieser Compiler ganze Python-Programme optimieren.
PyPy
Ein anderer Versuch, Python zu beschleunigen, ist unter dem Projektnamen PyPy bekannt. Bei PyPy handelt es sich um einen Drop-In-Ersatz für den Standardinterpreter mit einem eigenen JIT-Compiler und CFFI-Integration mit C/C++. Er ist in RPython geschrieben, einer statisch typisierten Untermenge der Sprache. PyPy will durchschnittlich 4,5-mal performanter sein als CPython. Allerdings hinkt das PyPy-Projekt der offiziellen Release-Roadmap deutlich hinterher. (Während ein Teil der Gemeinde bald mit der Version 3.11 vom Oktober 2022 arbeiten will, ist PyPy gerade einmal bei der Version 3.7.10 vom 15. Februar 2021 angekommen.)
Project Pyston
Eine weitere beschleunigte Drop-In-Implementierung ist das Projekt Pyston. Ursprünglich eine Initiative von Dropbox-Entwicklern, ist es heute ein eigenständiges Projekt mit einer von Grund auf neu konzipierten Codebasis. Dieser Drop-In-Ersatz für CPython verspricht einen Leistungszuwachs um 35 bis 65 Prozent bei der Ausführung von unverändertem Python-Code. (Das Unternehmen Dropbox hatte seinerzeit Python aufgrund der schwachen Performance zugunsten anderer Sprachen verworfen.)
Pyston befolgt einen anderen Ansatz als PyPy. Pyston ist ein Method-at-a-Time-JIT-Compiler, PyPy ein Tracing-JIT-Compiler. Pyston kompiliert jede Methode von Anfang bis Ende, während PyPy bestimmte Codepfade und Schleifen optimiert. Die im Juni 2022 veröffentlichte Edition von Pyston, Pyston-lite, lässt sich als ein Erweiterungsmodul einrichten und ist immerhin noch 10 bis 25 Prozent schneller als CPython – es kann also nicht so schwierig sein.
Cinder
Auch Instagram, ein Unternehmen der Meta-Gruppe (der Stammorganisation von Facebook), musste Python auf die Sprünge helfen. Meta hat im vergangenen Jahr die eigene Implementierung von CPython für Instagram unter dem Namen Cinder veröffentlicht.
Cinder greift recht tief in die Trickkiste mit einer Reihe von Leistungsoptimierungen wie Inline-Caching von Bytecode, „eifrige“ Evaluierung von Coroutines, einen Method-at-a-Time-JIT- und einen experimentellen typspezialisierten Bytecode-Compiler, der sich auf Typ-Annotationen stützt. Meta bietet für diese Codebasis jedoch keinen Support.
Das Faster CPython Project dürfte sich von dem einen oder anderen Gedanken sicherlich inspirieren lassen. Auf die Resultate darf man gespannt sein.
Python-Code läuft in WebAssembly
Python mag langsamer sein als JavaScript, aber schlägt den Rivalen dennoch in einer Nische um Längen: bei der Ausführung von Berechnungen an großen Datensätzen. Die ausgereiften wissenschaftlichen Bibliotheken von Python sind für die Gemeinde durch nichts zu ersetzen. Dies begründet unter anderem das Interesse an der Ausführung von Python in WASM (WebAssembly), dem portablen Kompilierungsziel für client- und serverseitige Web-Anwendungen. Dank verschiedener Bemühungen ist es mittlerweile möglich. Das Interesse scheint enorm zu sein.
WebAssembly ist ein binäres Befehlsformat für eine Stack-basierte virtuelle Maschine zur Bereitstellung von kompilierten, hochperformanten Client- und Serveranwendungen im Web. Die Technologie debütierte ursprünglich als eine Browser-Laufzeitumgebung, ein Schritt über JavaScript hinaus und ein Kompilierungsziel für eine Vielzahl von Sprachen. Serverseitiges WebAssembly bietet inzwischen eine verlockende Plattform für die Ausführung von Microservices nach dem Vorbild von Functions as a Service wie AWS Lambda.
Möglichkeiten zur Ausführung von Quellcode in WebAssembly gibt es mehrere. Eine besteht darin, den betreffenden Quellcode direkt in WebAssembly zu kompilieren (C, Rust und AssemblyScript verwenden alle diesen Ansatz). Alternativ ist es möglich, erst einmal einen Interpreter und die benötigten Bibliotheken für WebAssembly zu kompilieren und dann den Code an den Interpreter zu übergeben. Eben dieser zweite Ansatz bietet sich für Python an.
Pyodide
Pyodide ist ein Port von CPython auf WebAssembly/Emscripten, eine Distribution von Python und Node.js für den Webbrowser. Pyodide ermöglicht so die Verwendung von Python und einer Vielzahl von Bibliotheken für Datenwissenschaften innerhalb von Iodide, einer experimentellen interaktiven wissenschaftlichen Rechenumgebung für das Web.
Pyodide begann als ein experimentelles Projekt von Mozilla mit dem Ziel, In-Browser-Notebooks für die wissenschaftliche Forschung und Visualisierung in ähnlicher Weise wie Jupyter bereitzustellen. Es ermöglicht die Nutzung von Teilen des wissenschaftlichen und numerischen Python-Stacks, darunter NumPy (wissenschaftliches Rechnen), Pandas (Datenanalyse), Matplotlib (Visualisierung), SciPy (Computing für wissenschaftliche und technische Anwendungen) und scikit-learn (ML) im Browser mit vollständigem Zugriff auf Web-APIs.
PyScript
PyScript ist ein experimentelles Framework für die Entwicklung von umfangreichen Python-Anwendungen im Webbrowser durch den Einsatz von Technologien wie Pyodide und WASM. Das PyScript-Framework bietet Nutzern auf jedem Erfahrungsniveau Zugang zu dieser ausdrucksstarken, leicht zu erlernenden Programmiersprache und deren unzähligen Anwendungsmöglichkeiten.
PyScript versteht sich als eine „pythonische“ Alternative zu Scratch, JSFiddle und anderen solchen Frameworks. Das erklärte Ziel dieses Meta-Projektes bestehe darin, das Web in einen „freundlichen, hackbaren Raum“ zu verwandeln, in dem „jeder [Teilnehmer] interessante und interaktive Anwendungen erstellen“ könne. PyScript macht sich unter der Haube Technologien wie Pyodide, WASM und andere zunutze. Mit PyScript können Entwickler nützliche Komponenten aus der JavaScript-Welt aufgreifen und Seite an Seite mit Python nutzen.
Die Roadmap sieht gut aus
Im Oktober 2022 hat Python die stabile Version 3.11 erreicht, etwas über ein Jahr nach der Veröffentlichung von Python 3.10 am 4. Oktober 2021. Der Support für Python 3.10 soll erst im Oktober 2026 auslaufen. Der aktuelle Maintenance-Status trägt die Bezeichnung „Bugfix“. In dieser Phase arbeitet die Gemeinde sowohl an Verbesserungen der Cybersicherheit als auch an anderen, „profanen“ Bugfixes.
Die Python-Versionen 3.7, 3.8 und 3.9 haben den Maintenance-Status „Security“ und qualifizieren sich nur noch für das Beheben von richtig bedrohlichen Bugs. Wer im Jahre 2022 den Einstieg in Python wagt, ist gut beraten, auf Python in den Versionen 3.7 bis 3.10 zu setzen. So können Einsteiger in diese mächtige Skriptsprache den Nutzen aus dem hohen Reifegrad und dem aktiven Support maximieren.
Der Einsatz von Python-Code in der nicht mehr gepflegten Generation 2.x geht mit erhöhten Risiken einher. Python-2.x-Anwendungen werden immer unzuverlässiger. Die Entwicklung von Python 2 kulminierte in der Version 2.7 vom 3. Juli 2010. Der Support lief am 1. Januar 2020 aus, mehr als ein ganzes Jahrzehnt nach der Veröffentlichung. Mehr kann man nicht erwarten.
Unternehmen, die ihre Python-Altlasten noch in der Version 2.x der Sprache warten, statt sie fortlaufend zu modernisieren, setzen sich gravierenden Sicherheitsrisiken aus. Nicht zu unterschätzende Risiken haben ihren Ursprung in der Softwarelieferkette, in Softwareverwundbarkeiten, die nicht der eigenen Codebasis entstammen. Forscher des Sicherheitsspezialisten Check Point Research haben wiederholt Sicherheitslücken in PyPI, dem Python Package Index, aufgedeckt, dem offiziellen und beliebtesten Repository für Python-Code und -Bibliotheken
PyPI rühmt sich mehr als 600.000 aktiver Nutzer und hat Code zu mehr als 390.000 Softwareprojekten beigesteuert. Die Einrichtung vieler Python-Projekte setzt die Installation von PyPI voraus. In Reaktion auf die Sicherheitspannen hat das PyPI-Repository eine Sicherheitsrichtlinie eingeführt, die von den Betreuern kritischer Projekte die Nutzung von Zwei-Faktor-Authentifizierung mit einem Hardware-Schlüssel verlangt. Supply-Chain-Verwundbarkeiten sind jedoch keine Besonderheit von Python.
Für Python gibt es aber zumindest Hilfsmittel wie beispielsweise die Package pip-tools, um den Angreifern einen Riegel vorzuschieben. Es ist für Unternehmen von zentraler Bedeutung, ihre gesamte Python-Codebasis auf die dritte Generation der Sprache zu migrieren. Tools wie 2to3 können hier Abhilfe schaffen. Mit den besten Tools und Hilfsmitteln für die Entwicklung und fortlaufende Wartung von Python-Code befasst sich Kapitel 3.
Fazit
Beinahe drei Jahrzehnte lang fristete Python ein wenig glamouröses Dasein im Schatten der großen Programmiersprachen aus der C-Familie. Mit dem Aufkommen von Datenwissenschaften als ein universell nachgefragter Anwendungsfall startet Python jetzt richtig durch.
Als Teil des Dev-Insider-ebooks „Einstieg in Python“ beleuchtet dieser Artikel die Entwicklungen des Jahres 2022. Im eBook finden sich interessante Tools und Erweiterungen für die Programmiersprache.
(ID:48761568)