Cython

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 27 november 2021; kontroller kräver 7 redigeringar .
Cython
Språkklass öppen källkod , implementering av programmeringsspråk [d] , Transpiler , programmeringsspråk , fri programvara och Python-bibliotek [d]
Framträdde i 28 juli 2007
Författare Robert Bradshaw, Stefan Behnel med flera
Släpp 0.29.32 ( 29 juli 2022 ) [1]
Testversion 3.0.0a11 ( 31 juli 2022 ) [2]
Blivit påverkad Pyrex
Licens Apache-licens
Hemsida cython.org
OS Linux och Unix-liknande operativsystem

Cython  är ett programmeringsspråk som gör det enkelt att skriva C / C++- kodmoduler för Python . Utöver den vanliga Python-syntaxen stöds följande:

Cython-kod konverteras till C/C++-kod för kompilering och kan senare användas som en tillägg till standard Python eller som en fristående applikation med inbyggt Cython runtime-bibliotek.

Historik

Cython är efterföljaren till programmeringsspråket Pyrex , men har fler funktioner och optimeringar. [3]

Fördelar

Cython har en mycket nära syntax till Python.

En speciell fördel med detta "sömlösa" tillvägagångssätt för Python/C-blandning är att befintlig Python-kod kan ställas in för att köras nästan lika snabbt som att bara lägga till några statiska typdeklarationer och några anpassningar i kritiska slingor, utan behov av komplex gränssnittskod . Kodningshastighet och kodläsbarhet förblir jämförbara med Python.

På grund av den minskade omkostnaden i kontrollstrukturer (särskilt i slingor), optimistiska optimeringar och (begränsad) typinferens , körs Cython-kompilerad Python-kod generellt snabbare än i CPython 2.6.x, även om den absoluta förbättringen är starkt beroende av koden. Med typdeklarationer är typiska hastigheter för numeriska beräkningar/matriser runt 100-1000 gånger. [4] I jämförelse är en typisk hastighetsökning med Psyco ( en JIT- kompilator för Python) cirka 4-100 gånger. [5]

Cython har optimerats för låga subrutinsamtal, så att anropa extern C/C++-kod från Python via Cython-skalet är i allmänhet snabbare än de flesta andra lösningar. [6] [7]

Exempel

Följande exempel beräknar Ackermann-funktionen :

# Fil 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 )) print ( "Ackermann:" ) print ( ackermann ( 0 , 3 )) print ( ackermann ( 1 , 4 ))

För att få en körbar fil måste den översättas till C (här och nedan - skalkommandon för ett UNIX-liknande system ) [8] :

cython --embed ackermann.pyx -o ackermann.c

Efter det kan du kompilera den resulterande mellanfilen [8] :

gcc -g -O2 -o ackermann ackermann.c ` python-config --includes --ldflags `

Alternativ

För att binda C-bibliotek kan SWIG användas , som stöder flera programmeringsspråk på en gång, men på grund av dess allmänna karaktär förlorar Cython något i användarvänligheten (mängden extra kod som krävs). Andra anmärkningsvärda motsvarigheter inkluderar Parakeet (använder LLVM och JIT-kompilering av speciellt märkt Python-kod) [9] och Nuitka (en Python till C++ översättare som, liksom PyPy , försöker skriva ett Python-program vid kompilering) [10] [8] .

Se även

Anteckningar

  1. 0.29.32 . Hämtad 21 augusti 2022. Arkiverad från originalet 18 augusti 2022.
  2. 3.0.0a11 . Hämtad 21 augusti 2022. Arkiverad från originalet 21 augusti 2022.
  3. Skillnader med Pyrex Arkiverad 2011-07-25 .
  4. gmane.comp.python.cython.devel - Att skicka en pekare från Python (nedlänk) . Hämtad 30 november 2010. Arkiverad från originalet 14 februari 2017. 
  5. Psyco - Introduktion . Hämtad 30 november 2010. Arkiverad från originalet 29 november 2019.
  6. omslagsriktmärken för flera Python-omslagsgeneratorer (förutom Cython) (länk ej tillgänglig) . Hämtad 30 november 2010. Arkiverad från originalet 4 april 2015. 
  7. omslagsriktmärken för Cython, Boost.Python och PyBindGen . Hämtad 30 november 2010. Arkiverad från originalet 3 mars 2016.
  8. 1 2 3 Herron, 2014 .
  9. Parakeet: en runtime-kompilator för numerisk Python (nedlänk) . Datum för åtkomst: 27 november 2014. Arkiverad från originalet 12 november 2014. 
  10. Nuitka hem . Hämtad 27 november 2014. Arkiverad från originalet 30 maj 2020.

Länkar

Källor

  • Stefan Behnel, Robert Bradshaw, Craig Citro, Lisandro Dalcin, Dag Sverre Seljebotn, Kurt Smith. Cython: The Best of Both Worlds // Computing in Science and Engineering. - 2011. - Nr 13.2 . - S. 31-39. - doi : 10.1109/MCSE.2010.118 .
  • Philip Herron. Cython: Python till ursprunglig kod // Linux-format. - 2014. - Nr 12 / LXF191 . - S. 84-87. — ISSN 1470-4234 .
  • Philip Herron. Lär dig Cython-programmering. — Packt, september 2013. — 110p. — ISBN 9781783280797 .