Cython
| Cython | |
|---|---|
|
| |
| Základní data | |
| Paradigmata : | multi-paradigmatické |
| Rok vydání: | 28. července 2007 |
| Vývojář: | Robert Bradshaw, Stefan Behnel a kol. |
| Aktuální verze | 0,29,21 (8. července 2020) |
| Psaní : | silný , statický , dynamický („ psaní kachen “) |
| Ovlivněno: | Python , C , C ++ |
| Operační systém : | Linux , unixový systém |
| Licence : | Licence Apache, verze 2.0, licence Apache |
| cython.org | |
Cython je univerzální programovací jazyk, který je do značné míry kompatibilní s Pythonem . Stejně jako tyto podporuje různá paradigmata programování, jako je objektově orientované , aspektově orientované a funkční programování. Hlavní výhoda však spočívá v překladu do cílového jazyka C, který umožňuje jak vysoký výkon ve srovnání se standardním překladačem Pythonu, tak přímou interakci s externím kódem napsaným v C, C ++ nebo Fortranu .
Mezi hlavní aplikace patří připojení externích knihoven na CPython - interpret , stejně jako zrychlení Pythonu. Kompilátor Cython lze také použít ke kompilaci čistých modulů Pythonu.
Generovaný kód není soběstačný, ale vyžaduje běhové prostředí kompatibilní s CPython . Jak generování binárních modulů („rozšiřující modul“), které lze dynamicky importnačíst do interpretu Pythonu pomocí příkazu, a integrace linkeru tlumočníka CPython do generovaného modulu, takže spustitelný soubor Program je vytvořen ( vkládání ).
Historie vývoje
Cython je založen na Pyrex Greg Ewing (nejprve publikoval 4. dubna 2002). V červenci 2007 byl kompilátor Cython oddělen od Pyrexu jako nezávislý, otevřeně vyvinutý projekt Roberta Bradshawa a Stefana Behnela. Od té doby byly učiněny pokusy udržet oba kompilátory do značné míry kompatibilní, ačkoli Cython používá dalekosáhlé optimalizace a dosahuje větší kompatibility s Pythonovým kódem. Důležité rozdíly oproti Pyrexu jsou popsány v dokumentaci Cythonu.
Původ jména
Název Cython je kufrovým slovem dvou základních programovacích jazyků: Python a C.
Cíle
Projekt Cython si stanovil za cíl vyvinout kompilátor pro normální kód Pythonu, který nabízí nejvyšší možný výkon a rozsáhlou integraci s kódem napsaným v C, C ++ a Fortran prostřednictvím dalšího (explicitního) statického psaní.
Cython je optimalizační kompilátor, ale ne v obvyklém smyslu kompilátoru, který generuje binární kód . Překlad do kódu C spíše umožňuje, aby mnoho základních optimalizací a úprav platformy bylo ponecháno na kompilátoru C. Překladač Cython se tak může omezit na optimalizaci na vysoké úrovni na úrovni AST .
Kód C, který generuje Cython, je z velké části přenositelný, pokud jde o platformy (procesor, kompilátor C a operační systém) a verze CPython. V současné době (verze 0.28.5) jsou podporovány CPython verze 2.6 a 2.7, stejně jako všechny verze 3.3. Testované platformy zahrnují macOS , Windows a především různé distribuce Linuxu s 32bitovými a 64bitovými systémovými verzemi.
charakteristiky
Kombinace Pythonu a C umožňuje Cythonu mapovat velmi širokou škálu požadavků. Je možné jak programování na vysoké úrovni s datovými typy Pythonu, jazykové konstrukce a automatická správa paměti, tak i programování velmi blízké C s datovými typy C, funkcemi C a ruční správou paměti. Oba lze libovolně kombinovat a interakce s čistým (nekompilovaným) kódem Pythonu je stejně nativně možná jako interakce s kódem C nebo C ++, což umožňuje velmi jemný přístup při optimalizaci kódu Cython. Libovolná část kódu může být napsána v čistém Pythonu, kompilována s Cythonem, optimalizována pomocí statických datových typů nebo dokonce přenesena do C, v závislosti na požadavcích. Výsledkem je, že Cython velmi dobře podporuje zásadu, že většina běhu programu je vytvořena ve velmi malé části zdrojového kódu , tj. Optimalizace malé části programu může přinést velmi velký nárůst výkonu, zatímco pro většinu kódu je vysoká rychlost vývoje a nízké požadavky na údržbu jsou důležitější než nejvyšší možná rychlost provedení.
Programovací jazyk dosahuje jazykové integrace mezi Pythonem a C primárně prostřednictvím datových typů. Na datové typy Pythonu i datové typy C lze použít různé konstrukty jazyka Python. Jedním příkladem je smyčka 'for', což je smyčka foreach v Pythonu, tj. Může běžet přes jakýkoli iterovatelný kontejner (např. Seznamy nebo soubory). V Cythonu může tato smyčka běžet také přes seznamy C ++, pole C a podřízená pole, stejně jako přes sekce ukazatelů (řezy, např. ptr[2:8]Pro posuny 2–7). Kromě toho existuje automatická konverze mezi různými datovými typy Pythonu a datovými typy C, a to jak pro skalární typy (čísla), tak pro řetězce znaků a strukturované datové typy (např. Typy C struct a slovníky Pythonu).
výkon
Mnoho optimalizací, které kompilátor Cython provádí automaticky, má za následek specializaci generovaného kódu C. K tomu kompilátor používá explicitní statické deklarace typů a (jednoduchý) odvození typu , aby vygeneroval specializovaný C kód pro použité datové typy a určité vzory kódu. Velká část optimalizací v kompilátoru Cython souvisí se smyčkami, protože se zde obvykle hromadí velká část celkového běhu.
Řídicí struktury (zejména smyčky) jsou s překladačem Cython a C překládány mnohokrát rychleji, než když jsou interpretovány CPythonem. To je způsobeno optimistickými optimalizacemi a odvozením typu. To znamená, že kód Pythonu kompilovaný v Cythonu obvykle běží rychleji než v CPythonu 2.6.x, a to i bez výslovných deklarací typu, ačkoli relativní výkon přirozeně závisí na daném kódu. Prostřednictvím statické deklarace datových typů a výsledné specializace kódu C je však obvykle možné dosáhnout vícenásobné akcelerace. Zejména u matematických výpočtů je vylepšení runtime často výsledkem faktoru sto až jeden tisíc. Ve srovnání je typické zrychlení prostřednictvím kompilátoru Python JIT Psyco přibližně čtyřikrát až stokrát, u PyPy ve vybraných případech až dvanáctkrát.
Kód generovaný společností Cython pro funkce je optimalizován pro rychlé rozbalení a převod parametrů volání. Proto je volání nativního kódu do Pythonu prostřednictvím obálky Cython obecně rychlejší než jiné implementace obálky pro Python.
oblasti použití
Nejdůležitějšími oblastmi použití Cythonu jsou připojení externích knihoven k tlumočníkovi CPython, stejně jako zrychlení kódu v Pythonu, zejména v matematických výpočtech a výpočetně náročných algoritmech .
Například počítačový algebraický systém SageMath je z velké části založen na kódu Cython. Používá se k implementaci matematických algoritmů i k propojení externích kódů v C, C ++ a Fortran. Cython také podporuje velmi efektivní interakci s NumPy - maticemi , které se na základě těchto výpočtů výrazně zjednodušily.
Vysoce výkonná knihovna XML lxml je do značné míry implementována v Cythonu. Externí C knihovny libxml2 a libxslt jsou propojeny s interpretem Pythonu.
Dalším příkladem z prostředí vývojářů Cython Core je knihovna MPI mpi4py. Připojuje různé implementace MPI k CPythonu.
V indexu balíčků Pythonu je krátký seznam dalších knihoven, které jsou implementovány v Cythonu.
Související a podobné projekty
- Pyrex - předchůdce Cythonu
- Unladen Swallow - optimalizované běhové prostředí CPython; na základě LLVM
- PyPy - rámec kompilátoru JIT a běhové prostředí Pythonu, které je samo napsáno v pythonovském dialektu (RPython)
- Psyco - specializovaný kompilátor JIT a optimalizátor kódu pro běhové prostředí CPython
- Shed Skin - staticky napsaný programovací jazyk podobný Pythonu, který je kompilován podle C ++
Individuální důkazy
- ↑ Vydání 0.29.21 . 8. července 2020 (přístup 9. července 2020).
- ↑ github.com . (zpřístupněno 2. února 2020).
- ↑ Cython: C-rozšíření pro Python . (zpřístupněno 8. července 2018).
- ↑ původní verze předchůdce Pyrex
- ↑ Kompatibilita s Python 2 je deklarovaným cílem pro budoucí Cython verze 1.0 ( memento na originálu z 10. srpna 2011 v Internet Archive ) Info: archiv odkaz se automaticky vloží a dosud nebyly kontrolovány. Zkontrolujte prosím původní a archivovaný odkaz podle pokynů a poté toto oznámení odstraňte.
- ↑ řezy na docs.python.org, přístup 2. srpna 2018
- ↑ gmane.comp.python.cython.devel - srovnání pybench Cython a CPython 2.6.2
- ↑ gmane.comp.python.cython.devel - Předávání ukazatel z Python ( memento v originálu od 14. února 2017 do internetového archivu ) Info: archiv odkaz se automaticky vloží a dosud nebyly kontrolovány. Zkontrolujte prosím původní a archivovaný odkaz podle pokynů a poté toto oznámení odstraňte.
- ^ Psyco - úvod
- ↑ Rychlost PyPy 1.4 ve srovnání s CPython 2.6.2 s / bez Psyco
- ↑ C ++ wrapper kritéria pro různé Python wrapper generátory (bez Cython) ( Memento v originálu od 4. dubna 2015 do internetového archivu ) Info: archiv odkaz se automaticky vloží a dosud nebyly kontrolovány. Zkontrolujte prosím původní a archivovaný odkaz podle pokynů a poté toto oznámení odstraňte.
- ↑ Benchmarky C ++ pro Cython, Boost.Python a PyBindGen
- ↑ Seznam balíčků Pythonu implementovaných v Cythonu na PyPI