Cython | |
---|---|
Kieliluokka | avoimen lähdekoodin ohjelmistot , ohjelmointikielen toteutus [d] , Transpiler , ohjelmointikieli , ilmainen ohjelmisto ja Python-kirjasto [d] |
Esiintyi | 28. heinäkuuta 2007 |
Tekijä | Robert Bradshaw, Stefan Behnel ja paljon muuta |
Vapauta | 0,29,32 ( 29. heinäkuuta 2022 ) [1] |
Testiversio | 3.0.0a11 ( 31. heinäkuuta 2022 ) [2] |
Vaikutettu | Pyrex |
Lisenssi | Apache-lisenssi |
Verkkosivusto | cython.org |
OS | Linux- ja Unix-tyyppinen käyttöjärjestelmä |
Cython on ohjelmointikieli , jonka avulla Pythonille on helppo kirjoittaa C / C++- koodimoduuleja . Pythonin vakiosyntaksin lisäksi tuetaan seuraavia:
Cython-koodi muunnetaan C/C++-koodiksi käännöstä varten, ja sitä voidaan myöhemmin käyttää vakio Pythonin laajennuksena tai erillisenä sovelluksena, jossa on sisäänrakennettu Cython-ajonaikainen kirjasto.
Cython on Pyrex-ohjelmointikielen seuraaja , mutta siinä on enemmän ominaisuuksia ja optimointeja. [3]
Cythonilla on hyvin läheinen syntaksi Pythonille.
Erityinen etu tästä "saumattomasta" lähestymistavasta Python/C-sekoituksessa on, että olemassa oleva Python-koodi voidaan määrittää toimimaan melkein yhtä nopeasti kuin vain muutaman staattisen tyyppiilmoituksen lisääminen ja joitain mukautuksia kriittisiin silmukoihin ilman monimutkaista käyttöliittymäkoodia. . Koodausnopeus ja koodin luettavuus ovat verrattavissa Pythoniin.
Ohjausrakenteiden (etenkin silmukoiden) vähentyneiden lisäkustannusten, optimististen optimointien ja (rajoitetun) tyyppipäätelmän vuoksi Cythonin käännetty Python-koodi toimii yleensä nopeammin kuin CPython 2.6.x:ssä, vaikka absoluuttinen parannus riippuu suuresti koodista. Tyyppimäärityksiä käytettäessä numeeristen laskutoimitusten/taulukoiden tyypilliset nopeudet ovat noin 100-1000 kertaa. [4] Vertailun vuoksi tyypillinen nopeuden lisäys Psycoa ( JIT -kääntäjä Pythonille) käytettäessä on noin 4-100-kertainen. [5]
Cython on optimoitu alhaisiin alirutiinien kutsuihin, joten ulkoisen C/C++-koodin kutsuminen Pythonista Cython-kuoren kautta on yleensä nopeampaa kuin useimmat muut ratkaisut. [6] [7]
Seuraava esimerkki laskee Ackermann-funktion :
# Tiedosto ackermann.pyx cdef ackermann ( int m , int n ): if m == 0 : return n + 1 elif n == 0 : return ackermann ( m - 1 , 1 ) else : return ackermann ( m - 1 , ackermann ) ( m , n - 1 )) tulosta ( "Ackermann:" ) tulosta ( ackermann ( 0 , 3 )) tulosta ( ackermann ( 1 , 4 ))Suoritettavan tiedoston saamiseksi se on käännettävä C:ksi (tässä ja alla - UNIX-tyyppisen järjestelmän komentotulkkikomennot ) [8] :
cython --embed ackermann.pyx -o ackermann.cTämän jälkeen voit kääntää tuloksena olevan välitiedoston [8] :
gcc -g -O2 -o ackermann ackermann.c ` python-config --includes --ldflags `C-kirjastojen sitomiseen voidaan käyttää SWIGiä , joka tukee useita ohjelmointikieliä kerralla, mutta yleisyytensä vuoksi Cython menettää jonkin verran helppokäyttöisyyttä (tarvittavan lisäkoodin määrä). Muita merkittäviä vastineita ovat Parakeet (käyttää LLVM- ja JIT-kokoelmaa erityisesti merkityistä Python-koodista) [9] ja Nuitka (Python-C++-kääntäjä, joka, kuten PyPy , yrittää kirjoittaa Python-ohjelman käännöshetkellä) [10] [8] .
Python | |
---|---|
Yhteisö | |
Toteutukset | |
Muut |
|