Når vi taler om Python, mener vi ofte ikke kun sproget, men også implementeringen. Python er faktisk en specifikation for et sprog, der kan implementeres på mange forskellige måder.
Baggrund
Hvor vi går videre, skal vi forstå forskellen mellem bytecode og maskinkode (native code).
Maskinkode (aka native code)
Maskinkode er et sæt instruktioner, der direkte bliver eksekveret af CPU’en. Hver instruktion udfører en meget unik opgave, f.eks. indlæsning eller en logisk operation på data i CPU-hukommelsen. Næsten alle højniveausprog som f.eks. C oversætter kildekoden til eksekverbar maskinkode ved hjælp af kompilatorer, loadere og linkere. Hver processor eller processorfamilie har sit eget instruktionssæt for maskinkode.
Bytekode
Bytekode er også en binær repræsentation, der udføres af en virtuel maskine (ikke direkte af CPU’en). Den virtuelle maskine (som er skrevet forskelligt for forskellige maskiner) konverterer en binær instruktion til en specifik maskininstruktion. Et af de sprog, der bruger begrebet Bytecode, er Java.
Maskinekode er meget hurtigere sammenlignet med Bytecode, men Bytecode er bærbar og sikker sammenlignet med Machine Code.
Implementeringer af Python
Cpython
Den standardimplementering af programmeringssproget Python er Cpython. Som navnet antyder, er Cpython skrevet i C-sprog. Cpython kompilerer python-kildekoden til mellemliggende bytekode, som udføres af den virtuelle Cpython-maskine. CPython distribueres med et stort standardbibliotek, der er skrevet i en blanding af C og Python. CPython giver den højeste grad af kompatibilitet med Python-pakker og C-udvidelsesmoduler. Alle versioner af Python-sproget er implementeret i C, fordi CPython er referenceimplementationen.
Nogle af de implementationer, der er baseret på CPython-kørestokværket, men med udvidet adfærd eller funktioner i nogle aspekter, er Stackless Python, wpython, MicroPython.
Stackless Python – CPython med vægt på samtidighed ved hjælp af tasklets og kanaler (bruges af dspython til Nintendo DS)
Andre implementeringer
Der findes også nogle andre implementeringer af Python-sproget De eneste implementeringer, der er kendt for at være kompatible med en given version af sproget, er IronPython, Jython og PyPy.
Jython
Jython er en implementering af programmeringssproget Python, som kan køre på Java-platformen. Jython-programmer bruger Java-klasser i stedet for Python-moduler .Jython kompilerer til Java-bytekode, som derefter kan køres af Java virtual machine. Jython gør det muligt at anvende Java-klassebibliotekets funktioner fra Python-programmet. Jython er langsomt sammenlignet med Cpython og mangler kompatibilitet med CPython-biblioteker.
IronPython
En Python-implementering skrevet i C#, der er rettet mod Microsofts .NET framework. I lighed med Jython bruger den .Net Virtual Machine dvs. Common Language Runtime. IronPython kan bruge .NET Framework og Python-bibliotekerne, og andre .NET-sprog kan bruge Python-kode meget effektivt. IronPython klarer sig bedre i Python-programmer, der bruger tråde eller flere kerner, da det har en JIT, og også fordi det ikke har Global Interpreter Lock.
PyPyPy
“Hvis du vil have din kode til at køre hurtigere, skal du nok bare bruge PyPy.” – Guido van Rossum (skaberen af Python)
Python er et dynamisk programmeringssprog. Python siges at være langsomt, da CPython-implementeringen som standard kompilerer Python-kildekoden i bytekode, som er langsom i forhold til maskinkode (native code). Her kommer PyPy ind i billedet.
PyPyPy er en implementering af programmeringssproget Python, der er skrevet i Python. Interpreteren er skrevet i RPython (en delmængde af Python).
PyPy anvender (just-in-time-kompilering). I enkle vendinger bruger JIT kompileringsmetoder til at gøre fortolkersystemet mere effektivt og hurtigt. Så grundlæggende gør JIT det muligt at kompilere kildekoden til indfødt maskinkode, hvilket gør den meget hurtig.
PyPyPy leveres også som standard med understøttelse af stackless mode, hvilket giver mikro-threads til massiv samtidighed. Python siges at være ca. 7,5 gange hurtigere end Cpython.
Nogle andre implementeringer af Python er CLPython, Pyston, Psyco, Cython, IPython.
Denne artikel er bidraget af Saurabh Daalia. Hvis du kan lide GeeksforGeeks og gerne vil bidrage, kan du også skrive en artikel via contribute.geeksforgeeks.org eller sende din artikel på mail til [email protected]. Se din artikel blive vist på GeeksforGeeks’ hovedside, og hjælp andre nørder.