Da Python Open Source ist, können wir Python entsprechend unseren Anforderungen anpassen. Nach der Anpassung können wir diese Version benennen, wie wir wollen. Deshalb stehen mehrere Versionen von Python zur Verfügung. Jede Version ist eine angepasste Version von Python, um spezielle Anforderungen zu erfüllen. Es ist ähnlich wie bei den verschiedenen Versionen von UNIX, wie z.B. Ubuntu, Linux, RedHat Linux usw. Im Folgenden sind einige Versionen von Python aufgeführt:
CPython
Standardimplementierung der Python-Programmiersprache, die wir von python.org herunterladen, bereitgestellt von der Python Software Foundation. Es ist in C und Python geschrieben. Es erlaubt uns nicht, puren C-Code zu schreiben, nur Python-Code ist erlaubt. CPython kann als sowohl ein Interpreter als auch ein Compiler angesehen werden, da hier unser Python-Code zunächst in Python-Bytecode kompiliert wird und dann der Bytecode von der PVM oder Python Virtual Machine in plattformspezifische Operationen interpretiert wird. Beachten Sie, dass Interpreter vordefinierte Sprachsyntaxen haben, daher muss sie nicht in maschinenunabhängigen Maschinencode übersetzt werden. Hier führt der Interpreter den Bytecode während der Laufzeit direkt aus und führt zu plattformspezifischen Operationen.
Ältere Versionen von JavaScript, Ruby, PHP waren vollständig interpretierte Sprachen, da ihre Interpreter jede Zeile Quellcode direkt in plattformspezifische Operationen übersetzt haben, kein Bytecode war involviert. Bytecode existiert in Java, Python, C++ (.NET), C#, um die Sprache von der Ausführungsumgebung zu trennen, d.h. für die Portabilität, schreiben Sie einmal, führen Sie überall aus. Seit 2008 hat Googles V8 JavaScript-Machine eine Just-In-Time-Compiler für JavaScript entwickelt. Er führt den JavaScript-Code zeilenweise wie ein Interpreter aus, um die Startzeit zu verkürzen, aber wenn er auf einen Hot-Section trifft, mit Code, der wiederholt ausgeführt wird, wird dieser Code mit dem Baseline- oder Optimizing-Compiler optimiert.
Cython
Cython ist eine Programmiersprache, die eine Erweiterung von Python und C darstellt. Sie ist in C und Python geschrieben. Sie ist darauf ausgelegt, C-ähnliche Leistung mit Python-Syntax und optionaler C-Syntax zu bieten. Cython ist eine kompilierte Sprache, da sie C-Code generiert und von einem C-Compiler kompiliert wird. Wir können auf ähnliche Weise Code in Cython schreiben wie in Standard-Python oder CPython, die Unterschiede sind:
- Cython ermöglicht uns, optionalen zusätzlichen C-Code zu schreiben und,
- In Cython wird unser Python-Code intern in C-Code übersetzt, so dass er von einem C-Compiler kompiliert werden kann. Obwohl Cython zu deutlich schnellerer Ausführung führt, aber Original-C nicht erreicht. Das liegt daran, dass Cython Aufrufe des CPython-Interpreters und der CPython-Standardbibliotheken machen muss, um den geschriebenen CPython-Code zu verstehen
JPython / Jython
Java-Implementierung der Python-Programmiersprache. Sie ist in Java und Python geschrieben. Hier wird unser Python-Code zunächst in Java-Bytecode kompiliert und dann dieser Bytecode von der JVM oder Java Virtual Machine in plattformspezifische Operationen interpretiert. Dies ist ähnlich dazu, wie Java-Code ausgeführt wird: Java-Code wird zunächst in einen Zwischencode kompiliert, der dann von der JVM in plattformspezifische Operationen interpretiert wird.
PyPy
RPython-Implementierung der Python-Programmiersprache. Sie ist in einem eingeschränkten Teilmenge von Python namens Restricted Python (RPython) geschrieben. PyPy läuft schneller als CPython, da zur Interpretation des Bytecodes PyPy einen Just-in-Time-Compiler (Interpreter + Compiler) hat, während CPython einen Interpreter hat. Der JIT-Compiler in PyPy kann daher den Python-Bytecode zeilenweise wie ein Interpreter ausführen, um die Startzeit zu verringern, aber wenn er auf eine Hot-Section trifft, wobei eine Linie des Codes wiederholt ausgeführt wird, wird dieser Code mit einem Baseline- oder Optimizing-Compiler optimiert.
Nachteile des JIT-Compilers: anfänglich langsamere Ausführung, wenn der Code analysiert wird, und wenn Annahmen falsch sind führt das dazu, dass der optimierte kompilierte Code verworfen wird, d.h. es kommt zur Deoptimierung
oder Bailing out
, was die Code-Ausführung verlangsamen kann, obwohl JIT-Compiler eine Grenze für den Optimierungs-/Deoptimisierungszyklus hat. Nach einer bestimmten Anzahl von Deoptimierungen versucht der JIT-Compiler einfach nicht mehr zu optimieren. Während ein normaler Interpreter bei jeder Iteration wiederholt den Bytecode in Maschinencode übersetzen würde, wodurch mehr Zeit benötigt wird, um eine Schleife zu durchlaufen, die z.B. eine Million Mal ausgeführt wird.
IronPython
C#-Implementierung der Python-Programmiersprache, die auf das .NET-Framework abzielt
Ruby Python
funktioniert mit der Ruby-Plattform
Anaconda Python
Distribution der Python- und R-Programmiersprachen für wissenschaftliches Rechnen wie z.B. Data Science, Maschinelles Lernen, Künstliche Intelligenz, Deep Learning, Verarbeitung großer Datenmengen usw. Zahlreiche Bibliotheken wie scikit-learn, tensorflow, pytorch, numba, pandas, jupyter, numpy, matplotlib usw. sind mit diesem Paket verfügbar
Stacklos
Python für Nebenläufigkeit
Um die Geschwindigkeit jeder Implementierung zu testen, schreiben wir ein Programm, das 500-mal integrate_f mit einem N-Wert von 50.000 aufruft und die Ausführungszeit über mehrere Durchläufe aufzeichnet. Die folgende Tabelle zeigt die Benchmark-Ergebnisse :
Implementierung
Ausführungszeit (Sekunden)
Beschleunigung
CPython
9,25
CPython + Cython
0,21
44x
PyPy
0,57
16x