Wenn wir von Python sprechen, meinen wir oft nicht nur die Sprache, sondern auch die Implementierung. Python ist eigentlich eine Spezifikation für eine Sprache, die auf viele verschiedene Arten implementiert werden kann.
Hintergrund
Bevor wir weiter fortfahren, sollten wir den Unterschied zwischen Bytecode und Maschinencode (nativer Code) verstehen.
Maschinencode (auch bekannt als nativer Code)
Maschinencode ist eine Reihe von Anweisungen, die direkt von der CPU ausgeführt werden. Jede Anweisung führt eine ganz bestimmte Aufgabe aus, z. B. das Laden oder eine logische Operation an Daten im CPU-Speicher. Fast alle Hochsprachen wie C übersetzen den Quellcode mit Hilfe von Compilern, Ladern und Linkern in ausführbaren Maschinencode. Jeder Prozessor oder jede Prozessorfamilie hat ihren eigenen Maschinencode-Befehlssatz.
Bytecode
Bytecode ist ebenfalls eine binäre Darstellung, die von einer virtuellen Maschine (nicht direkt von der CPU) ausgeführt wird. Die virtuelle Maschine (die für verschiedene Maschinen unterschiedlich geschrieben ist) wandelt binäre Befehle in spezifische Maschinenbefehle um. Eine der Sprachen, die das Konzept von Bytecode verwendet, ist Java.
Maschinencode ist im Vergleich zu Bytecode viel schneller, aber Bytecode ist im Vergleich zu Maschinencode portabel und sicher.
Implementierungen von Python
Cpython
Die Standardimplementierung der Programmiersprache Python ist Cpython. Wie der Name schon sagt, ist Cpython in der Sprache C geschrieben. Cpython kompiliert den Python-Quellcode in einen Byte-Zwischencode, der von der virtuellen Maschine Cpython ausgeführt wird. CPython wird mit einer umfangreichen Standardbibliothek ausgeliefert, die in einer Mischung aus C und Python geschrieben ist. CPython bietet ein Höchstmaß an Kompatibilität mit Python-Paketen und C-Erweiterungsmodulen. Alle Versionen der Sprache Python sind in C implementiert, da CPython die Referenzimplementierung ist.
Einige der Implementierungen, die auf dem CPython-Laufzeitkern basieren, aber in einigen Aspekten ein erweitertes Verhalten oder erweiterte Funktionen aufweisen, sind Stackless Python, wpython, MicroPython.
Stackless Python – CPython mit dem Schwerpunkt auf Gleichzeitigkeit unter Verwendung von Tasklets und Channels (verwendet von dspython für den Nintendo DS)
Andere Implementierungen
Es gibt auch einige andere Implementierungen der Sprache Python Die einzigen Implementierungen, von denen bekannt ist, dass sie mit einer bestimmten Version der Sprache kompatibel sind, sind IronPython, Jython und PyPy.
Jython
Jython ist eine Implementierung der Programmiersprache Python, die auf der Java-Plattform laufen kann. Jython-Programme verwenden Java-Klassen anstelle von Python-Modulen.Jython kompiliert in Java-Bytecode, der dann von der Java Virtual Machine ausgeführt werden kann. Jython ermöglicht die Nutzung von Funktionen der Java-Klassenbibliothek aus dem Python-Programm heraus. Jython ist im Vergleich zu Cpython langsam und nicht mit den CPython-Bibliotheken kompatibel.
IronPython
Eine in C# geschriebene Python-Implementierung, die auf das .NET-Framework von Microsoft abzielt. Ähnlich wie Jython verwendet es die .Net Virtual Machine, d.h. Common Language Runtime. IronPython kann das .NET Framework und die Python-Bibliotheken nutzen, und andere .NET-Sprachen können Python-Code sehr effizient verwenden. IronPython funktioniert besser in Python-Programmen, die Threads oder mehrere Kerne verwenden, da es ein JIT hat, und auch, weil es die Global Interpreter Lock nicht hat.
PyPy
„Wenn Sie wollen, dass Ihr Code schneller läuft, sollten Sie wahrscheinlich nur PyPy verwenden.“ – Guido van Rossum (Schöpfer von Python)
Python ist eine dynamische Programmiersprache. Python gilt als langsam, da die Standardimplementierung von CPython den Python-Quellcode in Bytecode kompiliert, der im Vergleich zum Maschinencode (nativer Code) langsam ist. Hier kommt PyPy ins Spiel.
PyPy ist eine Implementierung der Programmiersprache Python, die in Python geschrieben ist. Der Interpreter ist in RPython (einer Untermenge von Python) geschrieben.
PyPy verwendet (Just-in-Time-Compilation). Einfach ausgedrückt verwendet JIT Kompilierungsmethoden, um das Interpreter-System effizienter und schneller zu machen. JIT ermöglicht es also, den Quellcode in nativen Maschinencode zu kompilieren, was ihn sehr schnell macht.
PyPy unterstützt standardmäßig auch den Stackless-Modus, der Mikro-Threads für massive Gleichzeitigkeit bietet. Python soll etwa 7,5 mal schneller sein als Cpython.
Einige andere Implementierungen von Python sind CLPython, Pyston, Psyco, Cython, IPython.
Dieser Artikel wurde von Saurabh Daalia beigetragen. Wenn Ihnen GeeksforGeeks gefällt und Sie einen Beitrag leisten möchten, können Sie auch einen Artikel unter contribute.geeksforgeeks.org schreiben oder Ihren Artikel an [email protected] schicken. Dein Artikel wird auf der GeeksforGeeks-Hauptseite erscheinen und anderen Geeks helfen.