GeeksforGeeks

Kun puhumme Pythonista, tarkoitamme usein kielen lisäksi myös toteutusta. Python on itse asiassa spesifikaatio kielelle, joka voidaan toteuttaa monella eri tavalla.

Tausta
Ennen kuin jatkamme pidemmälle ymmärrämme bytekoodin ja konekoodin(natiivikoodi) eron.
Konekoodi(aka natiivikoodi)
Konekoodi on joukko käskyjä, jotka prosessori saa suoraan suoritettua. Jokainen käsky suorittaa hyvin yksilöllisen tehtävän, kuten latauksen tai loogisen operaation suorittimen muistissa oleville tiedoille. Lähes kaikki korkean tason kielet, kuten C, kääntävät lähdekoodin suoritettavaksi konekoodiksi kääntäjien, lataajien ja linkittäjien avulla. Jokaisella prosessorilla tai prosessoriperheellä on oma konekoodin käskykokonaisuutensa.
Bytecode
Bytecode on myös binäärimuotoinen esitys, jonka suorittaa virtuaalikone (ei suoraan CPU). Virtuaalikone (joka on kirjoitettu eri koneille eri tavalla) muuntaa binäärisen käskyn tietyksi koneen käskyksi. Yksi Bytecode-käsitettä käyttävä kieli on Java.

Konekoodi on paljon nopeampi verrattuna Bytecodeen, mutta Bytecode on siirrettävissä ja turvallinen verrattuna konekoodiin.

Pythonin toteutukset
Cpython
Pythonin ohjelmointikielen oletustoteutus on Cpython. Kuten nimestä voi päätellä, Cpython on kirjoitettu C-kielellä. Cpython kääntää pythonin lähdekoodin välitavukoodiksi, jonka Cpython-virtuaalikone suorittaa. Cpythonissa on laaja standardikirjasto, joka on kirjoitettu C:n ja Pythonin sekoituksella. CPython tarjoaa parhaan mahdollisen yhteensopivuuden Python-pakettien ja C-laajennusmoduulien kanssa. Kaikki Python-kielen versiot on toteutettu C:llä, koska CPython on referenssitoteutus.
Joitakin toteutuksia, jotka perustuvat CPython-ajoaikaytimen ytimeen, mutta joilla on laajennettu käyttäytyminen tai ominaisuuksia joiltakin osin, ovat Stackless Python, wpython, MicroPython.
Stackless Python – CPython, jossa painotetaan samanaikaisuutta taskletien ja kanavien avulla (käytetään dspythonissa Nintendo DS:lle)

Muut toteutukset
On olemassa myös joitakin muita toteutuksia Python-kielestä Ainoat toteutukset, joiden tiedetään olevan yhteensopivia kielen tietyn version kanssa, ovat IronPython, Jython ja PyPy.

Jython
Jython on Python-ohjelmointikielen toteutus, joka toimii Java-alustalla. Jython-ohjelmat käyttävät Python-moduulien sijasta Java-luokkia .Jython kääntyy Javan tavukoodiksi, jota voidaan sitten ajaa Javan virtuaalikoneella. Jython mahdollistaa Java-luokkakirjaston toimintojen käytön Python-ohjelmasta. Jython on hidas verrattuna Cpythoniin, eikä se ole yhteensopiva CPython-kirjastojen kanssa.

IronPython
C#-kielellä kirjoitettu Python-toteutus, joka on suunnattu Microsoftin .NET-kehykseen. Jythonin tavoin se käyttää .Net Virtual Machinea eli Common Language Runtimea. IronPython voi käyttää .NET Frameworkia ja Python-kirjastoja, ja muut .NET-kielet voivat käyttää Python-koodia erittäin tehokkaasti. IronPython toimii paremmin Python-ohjelmissa, jotka käyttävät säikeitä tai useita ytimiä, koska siinä on JIT ja myös siksi, että siinä ei ole Global Interpreter Lockia.”

PyPy
”Jos haluat koodisi toimivan nopeammin, sinun pitäisi luultavasti vain käyttää PyPy:tä.” – Guido van Rossum (Pythonin luoja)
Python on dynaaminen ohjelmointikieli. Pythonin sanotaan olevan hidas, koska CPythonin oletustoteutus kääntää pythonin lähdekoodin byte-koodiksi, joka on hidasta verrattuna konekoodiin(natiivikoodiin). Tässä PyPy tulee kuvaan.
PyPy on Python-kielellä kirjoitettu Python-ohjelmointikielen toteutus. Tulkki on kirjoitettu RPythonilla (Pythonin osajoukko).

PyPy käyttää (just-in-time compilation). Yksinkertaisesti sanottuna JIT käyttää kääntämismenetelmiä tehdäkseen tulkintajärjestelmästä tehokkaamman ja nopeamman. Eli pohjimmiltaan JIT mahdollistaa lähdekoodin kääntämisen natiiviksi konekoodiksi, mikä tekee siitä erittäin nopeaa.
PyPy:n mukana tulee myös oletusarvoisesti tuki pinottomalle tilalle, joka tarjoaa mikrosäikeitä massiivista samanaikaisuutta varten. Pythonin sanotaan olevan noin 7,5 kertaa nopeampi kuin Cpython.

Joitakin muita Pythonin toteutuksia ovat CLPython, Pyston, Psyco, Cython, IPython.

Tämän artikkelin on kirjoittanut Saurabh Daalia. Jos pidät GeeksforGeeksistä ja haluat osallistua, voit myös kirjoittaa artikkelin osoitteessa contribute.geeksforgeeks.org tai lähettää artikkelisi sähköpostitse osoitteeseen [email protected]. Näet artikkelisi näkyvän GeeksforGeeksin pääsivulla ja autat muita geekkejä.

Jätä kommentti