Cython | |
---|---|
Sprog klasse | open source software , implementering af programmeringssprog [d] , Transpiler , programmeringssprog , gratis software og Python-bibliotek [d] |
Dukkede op i | 28. juli 2007 |
Forfatter | Robert Bradshaw, Stefan Behnel og flere |
Frigøre | 0.29.32 ( 29. juli 2022 ) [1] |
Test version | 3.0.0a11 ( 31. juli 2022 ) [2] |
Blev påvirket | Pyrex |
Licens | Apache-licens |
Internet side | cython.org |
OS | Linux og Unix-lignende operativsystem |
Cython er et programmeringssprog, der gør det nemt at skrive C / C++ kodemoduler til Python . Ud over standard Python-syntaks understøttes følgende:
Cython-kode konverteres til C/C++-kode til kompilering og kan senere bruges som en udvidelse til standard Python eller som en selvstændig applikation med indbygget Cython runtime-bibliotek.
Cython er efterfølgeren til Pyrex-programmeringssproget , men har flere funktioner og optimeringer. [3]
Cython har en meget tæt syntaks til Python.
En særlig fordel ved denne "sømløse" tilgang til Python/C-blanding er, at eksisterende Python-kode kan sættes op til at køre næsten lige så hurtigt som blot at tilføje et par statiske typedeklarationer og nogle tilpasninger i kritiske loops, uden behov for kompleks grænsefladekode . Kodningshastighed og kodelæsbarhed forbliver sammenlignelig med Python.
På grund af den reducerede overhead i kontrolstrukturer (især i loops), optimistiske optimeringer og (begrænset) typeinferens , kører Cython-kompileret Python-kode generelt hurtigere end i CPython 2.6.x, selvom den absolutte forbedring er meget afhængig af koden. Med typedeklarationer er typiske speedups for numeriske beregninger/arrays omkring 100-1000 gange. [4] Til sammenligning er en typisk hastighedsstigning ved brug af Psyco ( en JIT- kompiler til Python) omkring 4-100 gange. [5]
Cython er blevet optimeret til lave subrutineopkaldsoverhead, så at kalde ekstern C/C++-kode fra Python gennem Cython-skallen er generelt hurtigere end de fleste andre løsninger. [6] [7]
Følgende eksempel beregner 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 ))For at få en eksekverbar fil skal den oversættes til C (her og nedenfor - shell-kommandoer af et UNIX-lignende system ) [8] :
cython --embed ackermann.pyx -o ackermann.cDerefter kan du kompilere den resulterende mellemfil [8] :
gcc -g -O2 -o ackermann ackermann.c ` python-config --includes --ldflags `For at binde C-biblioteker kan SWIG bruges , som understøtter flere programmeringssprog på én gang, men på grund af dets almindelighed mister Cython noget i brugervenlighed (den nødvendige mængde ekstra kode). Andre bemærkelsesværdige modstykker inkluderer Parakeet (bruger LLVM og JIT-kompilering af specielt markeret Python-kode) [9] og Nuitka (en Python til C++-oversætter, der ligesom PyPy forsøger at skrive et Python-program på kompileringstidspunktet) [10] [8] .
Python | |
---|---|
Fællesskab | |
Implementeringer | |
Andet |
|