Cython

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 27. listopadu 2021; kontroly vyžadují 7 úprav .
Cython
Jazyková třída open source software , implementace programovacího jazyka [d] , Transpiler , programovací jazyk , svobodný software a knihovna Python [d]
Objevil se v 28. července 2007
Autor Robert Bradshaw, Stefan Behnel a další
Uvolnění 0.29.32 ( 29. července 2022 ) [1]
Testovací verze 3.0.0a11 ( 31. července 2022 ) [2]
Byl ovlivněn Pyrex
Licence Licence Apache
webová stránka cython.org
OS Linux a operační systém podobný Unixu

Cython  je programovací jazyk , který usnadňuje psaní modulů kódu C / C++ pro Python . Kromě standardní syntaxe Pythonu jsou podporovány následující:

Kód Cythonu je převeden do kódu C/C++ pro kompilaci a může být později použit jako rozšíření standardního Pythonu nebo jako samostatná aplikace s vestavěnou knihovnou Cython runtime.

Historie

Cython je nástupcem programovacího jazyka Pyrex , ale má více funkcí a optimalizací. [3]

Výhody

Cython má velmi blízkou syntaxi k Pythonu.

Zvláštní výhodou tohoto „bezproblémového“ přístupu k míchání Pythonu/C je to, že stávající kód Pythonu lze nastavit tak, aby běžel téměř stejně rychle, jako je pouhé přidání několika deklarací statického typu a některých úprav v kritických smyčkách, bez potřeby složitého kódu rozhraní. . Rychlost kódování a čitelnost kódu zůstávají srovnatelné s Pythonem.

Díky snížené režii v řídicích strukturách (zejména ve cyklech), optimistickým optimalizacím a (omezené) inferenci typu , kód Pythonu zkompilovaný Cythonem obecně běží rychleji než v CPythonu 2.6.x, ačkoli absolutní zlepšení je vysoce závislé na kódu. S deklaracemi typu jsou typické zrychlení pro numerické výpočty/pole přibližně 100-1000krát. [4] Pro srovnání, typické zvýšení rychlosti pomocí Psyco ( překladač JIT pro Python) je asi 4-100krát. [5]

Cython byl optimalizován pro nízkou režii volání podprogramů, takže volání externího kódu C/C++ z Pythonu přes Cython shell je obecně rychlejší než většina ostatních řešení. [6] [7]

Příklad

Následující příklad vypočítává Ackermannovu funkci :

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

Chcete-li získat spustitelný soubor, je třeba jej přeložit do C (zde a níže - příkazy shellu systému podobného UNIXu ) [8] :

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

Poté můžete zkompilovat výsledný mezisoubor [8] :

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

Alternativy

K navázání C knihoven lze použít SWIG , který podporuje několik programovacích jazyků najednou, ale kvůli své obecnosti Cython poněkud ztrácí na jednoduchosti použití (množství potřebného dalšího kódu). Mezi další pozoruhodné protějšky patří Parakeet (používá LLVM a JIT kompilaci speciálně označeného kódu Python) [9] a Nuitka (překladač Pythonu do C++, který se stejně jako PyPy pokouší napsat program Python v době kompilace) [10] [8] .

Viz také

Poznámky

  1. 0.29.32 . Získáno 21. srpna 2022. Archivováno z originálu dne 18. srpna 2022.
  2. 3.0.0a11 . Získáno 21. srpna 2022. Archivováno z originálu dne 21. srpna 2022.
  3. Rozdíly s Pyrexem archivováno 25. 7. 2011 .
  4. gmane.comp.python.cython.devel - Předání ukazatele z Pythonu (downlink) . Získáno 30. listopadu 2010. Archivováno z originálu 14. února 2017. 
  5. Psyco - Úvod . Získáno 30. listopadu 2010. Archivováno z originálu 29. listopadu 2019.
  6. benchmarky wrapperu pro několik generátorů wrapperů Pythonu (kromě Cythonu) (odkaz není dostupný) . Získáno 30. listopadu 2010. Archivováno z originálu 4. dubna 2015. 
  7. benchmarky wrapperu pro Cython, Boost.Python a PyBindGen . Získáno 30. listopadu 2010. Archivováno z originálu 3. března 2016.
  8. 1 2 3 Herron, 2014 .
  9. Parakeet: runtime kompilátor pro numerický Python (downlink) . Datum přístupu: 27. listopadu 2014. Archivováno z originálu 12. listopadu 2014. 
  10. Nuitka Home . Získáno 27. listopadu 2014. Archivováno z originálu 30. května 2020.

Odkazy

Zdroje

  • Stefan Behnel, Robert Bradshaw, Craig Citro, Lisandro Dalcin, Dag Sverre Seljebotn, Kurt Smith. Cython: To nejlepší z obou světů // Computing in Science and Engineering. - 2011. - č. 13.2 . - S. 31-39. - doi : 10.1109/MCSE.2010.118 .
  • Philip Herron. Cython: Python na nativní kód // Formát Linux. - 2014. - č. 12 / LXF191 . - S. 84-87. — ISSN 1470-4234 .
  • Philip Herron. Naučte se programovat Cython. — Packt, září 2013. — 110p. — ISBN 9781783280797 .