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.
Cython je nástupcem programovacího jazyka Pyrex , ale má více funkcí a optimalizací. [3]
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]
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.cPoté můžete zkompilovat výsledný mezisoubor [8] :
gcc -g -O2 -o ackermann ackermann.c ` python-config --includes --ldflags `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] .
Krajta | |
---|---|
Společenství | |
Implementace | |
jiný |
|