Wanneer we het over Python hebben, bedoelen we vaak niet alleen de taal maar ook de implementatie. Python is eigenlijk een specificatie voor een taal die op veel verschillende manieren kan worden geïmplementeerd.
Achtergrond
Voordat we verder gaan, laten we het verschil begrijpen tussen bytecode en machinecode(native code).
Machinecode(aka native code)
Machinecode is een verzameling instructies die direct door de CPU wordt uitgevoerd. Elke instructie voert een zeer unieke taak uit, zoals laden of een logische bewerking op gegevens in het CPU-geheugen. Bijna alle talen op hoog niveau, zoals C, vertalen de broncode in uitvoerbare machinecode met behulp van compilers, loaders en linkers. Elke processor of processorfamilie heeft zijn eigen instructieset voor machinecode.
Bytecode
Bytecode is ook binaire weergave die wordt uitgevoerd door een virtuele machine (niet rechtstreeks door de CPU). De virtuele machine (die voor verschillende machines verschillend is geschreven) zet binaire instructies om in een specifieke machine-instructie. Een van de talen die het concept van Bytecode gebruikt is Java.
Machinecode is veel sneller in vergelijking met Bytecode, maar Bytecode is overdraagbaar en veilig in vergelijking met Machinecode.
Implementaties van Python
Cpython
De standaardimplementatie van de programmeertaal Python is Cpython. Zoals de naam al doet vermoeden is Cpython geschreven in de taal C. Cpython compileert de python broncode in intermediaire bytecode, die wordt uitgevoerd door de Cpython virtuele machine. CPython wordt gedistribueerd met een grote standaardbibliotheek, geschreven in een mengsel van C en Python. CPython biedt het hoogste niveau van compatibiliteit met Python-pakketten en C-uitbreidingsmodules. Alle versies van de Python taal zijn geïmplementeerd in C omdat CPython de referentie-implementatie is.
Enkele implementaties die gebaseerd zijn op CPython runtime core maar met uitgebreid gedrag of mogelijkheden in sommige aspecten zijn Stackless Python, wpython, MicroPython.
Stackless Python – CPython met de nadruk op concurrency met behulp van tasklets en channels (gebruikt door dspython voor de Nintendo DS)
Andere implementaties
Er zijn ook enkele andere implementaties van de Python-taal De enige implementaties waarvan bekend is dat ze compatibel zijn met een bepaalde versie van de taal zijn IronPython, Jython en PyPy.
Jython
Jython is een implementatie van de programmeertaal Python die op het Java-platform kan draaien. Jython-programma’s maken gebruik van Java-klassen in plaats van Python-modules. Jython compileert in Java-bytecode, die vervolgens kan worden uitgevoerd door de virtuele machine van Java. Jython maakt het gebruik van Java class library functies mogelijk vanuit het Python programma. Jython is traag in vergelijking met Cpython en is niet compatibel met CPython-bibliotheken.
IronPython
Een Python-implementatie geschreven in C# gericht op het .NET-framework van Microsoft. Net als Jython maakt het gebruik van .Net Virtual Machine, d.w.z. Common Language Runtime. IronPython kan gebruik maken van het .NET Framework en Python bibliotheken, en andere .NET talen kunnen zeer efficiënt Python code gebruiken. IronPython presteert beter in Python programma’s die threads of meerdere cores gebruiken, omdat het een JIT heeft, en ook omdat het niet de Global Interpreter Lock heeft.
PyPy
“Als je je code sneller wilt laten lopen, moet je waarschijnlijk gewoon PyPy gebruiken.” – Guido van Rossum (bedenker van Python)
Python is een dynamische programmeertaal. Er wordt gezegd dat Python traag is omdat de standaard CPython implementatie de python broncode compileert in bytecode die traag is in vergelijking met machine code (native code). Hier komt PyPy om de hoek kijken.
PyPy is een implementatie van de Python programmeertaal geschreven in Python. De Interpreter is geschreven in RPython (een subset van Python).
PyPy maakt gebruik van (just-in-time compilatie). In eenvoudige bewoordingen gebruikt JIT compilatie methoden om het interpreter systeem efficiënter en sneller te maken. Dus eigenlijk JIT maakt het mogelijk om de broncode te compileren in native machine code die het zeer snel maakt.
PyPy wordt ook geleverd met standaard met ondersteuning voor stackless mode, het verstrekken van micro-threads voor massale concurrency. Er wordt gezegd dat Python ongeveer 7,5 keer sneller is dan Cpython.
Enkele andere implementaties van Python zijn CLPython, Pyston, Psyco, Cython, IPython.
Dit artikel is bijgedragen door Saurabh Daalia. Als je GeeksforGeeks leuk vindt en een bijdrage wilt leveren, kun je ook een artikel schrijven via contribute.geeksforgeeks.org of mail je artikel naar [email protected]. Zie je artikel verschijnen op de GeeksforGeeks hoofdpagina en help andere Geeks.