CPython
- Nezamieňať s jazykom Cython.
| CPython | |
| Logo | |
| Základné informácie | |
|---|---|
| Autor | Guido van Rossum |
| Vývojár | hlavní vývojári Pythonu a komunita okolo Pythonu s podporou nadácie Python Software Foundation |
| Posledná stabilná verzia | 3.15.0 (9. október 2026) |
| Vyvinutý v | C, Python |
| Operačný systém | multiplatformový (pozri časť Distribúcia) |
| Lokalizácia | angličtina |
| Typ softvéru | Interpreter programovacieho jazyka Python |
| Licencia | Python Software Foundation License |
| Ďalšie odkazy | |
| Webová stránka | python.org |
|
| |
CPython je referenčná implementácia programovacieho jazyka Python.[1] Je napísaný v jazykoch C a Python a je predvolenou a najrozšírenejšou implementáciou jazyka Python.
CPython možno označiť za interpreter aj za kompilátor, pretože kód v Pythone pred interpretovaním kompiluje do bajtkódu.[1] Má rozhranie na volanie funkcií v iných jazykoch (foreign function interface) vrátane jazyka C, pri ktorom treba väzby (bindings) explicitne napísať v inom jazyku ako Python.
Návrh
[upraviť | upraviť zdroj]Charakteristickou vlastnosťou CPythonu je, že používa globálny zámok interpretera (global interpreter lock, GIL), takže v každom procese interpretera CPython môže bajtkód v danom okamihu spracúvať iba jedno vlákno.[2] To neznamená, že viacvláknové spracovanie nemá zmysel; najbežnejší prípad jeho použitia je situácia, keď vlákna väčšinu času čakajú na dokončenie externých procesov.
To sa môže stať, keď viacero vlákien obsluhuje samostatných klientov. Jedno vlákno môže čakať na odpoveď klienta, ďalšie na vykonanie dotazu v databáze a tretie medzitým skutočne spracúva kód v Pythone.
GIL však znamená, že CPython nie je vhodný pre procesy, ktoré v kóde v Pythone implementujú výpočtovo náročné algoritmy, ktoré by sa inak dali rozdeliť medzi viacero jadier procesora.
Súbežné vykonávanie kódu v Pythone možno dosiahnuť iba pomocou samostatných procesov interpretera CPython, ktoré spravuje viacúlohový operačný systém. To sťažuje komunikáciu medzi súbežne bežiacimi procesmi Pythonu, hoci modul multiprocessing tento problém do istej miery zmierňuje; aplikácie, ktoré zo súbežného vykonávania kódu v Pythone naozaj môžu ťažiť, sa tak dajú implementovať s obmedzenou réžiou.
Prítomnosť GIL zjednodušuje implementáciu CPythonu a uľahčuje implementáciu viacvláknových aplikácií, ktoré zo súbežného vykonávania kódu v Pythone neťažia. Bez GIL by však viacprocesové aplikácie museli zabezpečiť, aby bol všetok spoločný kód bezpečný z hľadiska vlákien (thread-safe).[chýba zdroj]
Hoci vzniklo mnoho návrhov na odstránenie GIL, všeobecne prevládal názor, že vo väčšine prípadov výhody GIL prevažujú nad nevýhodami; v tých niekoľkých prípadoch, keď je GIL úzkym hrdlom, by mala byť aplikácia postavená na viacprocesovej štruktúre. S cieľom umožniť väčší paralelizmus priniesla verzia Python 3.12 možnosť mať v jednom procese Pythonu samostatný GIL pre každý subinterpreter (samostatný interpreter v rámci jedného procesu); subinterpretery boli opísané ako „vlákna s voliteľným zdieľaním“.[3][4]
Po viacerých diskusiách sa v roku 2023 začal projekt, ktorý navrhol, aby bol GIL od verzie Pythonu 3.13 voliteľný.[5] Táto možnosť bola vydaná 7. októbra 2024 vo verzii Python 3.13.0 ako experimentálna verzia bez GIL (angl. free-threaded build).[6][7] Od verzie Python 3.14 je verzia bez GIL oficiálne podporovaná a už nie je experimentálna, zostáva však voliteľná.[8]
História
[upraviť | upraviť zdroj]V roku 2009 vznikla vetva s názvom Unladen Swallow, ktorú sponzorovala spoločnosť Google a ktorej cieľom bolo začleniť do CPythonu kompilátor just-in-time (JIT).[9][10] Vývoj sa skončil v roku 2011 bez toho, aby bola vetva začlenená do hlavnej implementácie,[11] hoci časť jej kódu, napríklad vylepšenia modulu cPickle, sa do nej dostala.[12][9]
V roku 2021 bol navrhnutý „špecializujúci adaptívny interpreter“ (specializing adaptive interpreter, SAI), ktorý podľa meraní zvýšil výkon o 10 – 60 %. Často vykonávané inštrukcie, pri ktorých sa ukazuje zjavná stabilita dátových typov, nahrádza rýchlejšími inštrukciami špecializovanými na konkrétny typ a v prípade potreby dokáže špecializáciu inštrukcií zrušiť.[13] SAI bol prvýkrát zahrnutý do verzie Python 3.11, ktorá bola podľa sady testov výkonu „pyperformance“ v priemere o 25 % rýchlejšia ako Python 3.10.[14]
V roku 2024 bol do hlavnej vývojovej vetvy CPythonu začlenený experimentálny kompilátor just-in-time. Tento raný JIT využíva techniku copy-and-patch: šablóny strojového kódu sa pri zostavovaní CPythonu generujú nástrojom LLVM, ktorý samotný bežiaci interpreter nepotrebuje; cieľom je zrýchliť často vykonávané časti kódu. V čase začlenenia ešte kompilátor nebol súčasťou predvolených konfigurácií zostavenia CPythonu a dosahoval približne rovnaký výkon ako SAI; jednou z podmienok jeho plného prijatia bolo zvýšenie výkonu aspoň o 5 %.[15] Zostáva predvolene vypnutý a používatelia ho môžu zapnúť na experimentovanie.[8] Od verzie Python 3.14 obsahujú oficiálne binárne vydania pre macOS a Windows experimentálny kompilátor JIT, ktorý sa zapína premennou prostredia PYTHON_JIT=1.[8] Vo verzii Python 3.15 (október 2026) bol experimentálny JIT výrazne vylepšený; podľa sady testov výkonu pyperformance je na Linuxe pre x86-64 v priemere o 7 – 8 % rýchlejší ako štandardný interpreter.[16]
Distribúcia
[upraviť | upraviť zdroj]Podľa dokumentu PEP 11 (stav k 17. októbru 2026) patria medzi oficiálne podporované platformy prvej úrovne (tier 1) Linux pre 64-bitové procesory ARM a x86-64 s nástrojmi GCC, macOS pre 64-bitové procesory ARM a Microsoft Windows pre 32- a 64-bitové procesory Intel. Oficiálnu podporu druhej úrovne (tier 2) má Linux pre 64-bitové procesory ARM a x86-64 s kompilátorom Clang, Windows pre 64-bitové procesory ARM, macOS pre 64-bitové procesory Intel a WebAssembly (wasm32) s rozhraním WASI. Oficiálne podporovanými platformami tretej úrovne (tier 3) sú Android, iOS, Raspberry Pi OS (32- aj 64-bitový), Linux pre 64-bitové procesory PowerPC v režime little-endian, pre procesory RISC-V a pre s390x, WebAssembly s nástrojom Emscripten a FreeBSD pre x86-64.[17]
Spoločnosť IBM dodáva CPython aj pre operačný systém z/OS.[18][19]
Dokument PEP 11[17] uvádza platformy, ktoré organizácia Python Software Foundation v CPythone nepodporuje. Tieto platformy môžu byť naďalej podporované externými portmi. Patria k nim:
- AtheOS (nepodporovaný od verzie 2.6)
- BeOS (nepodporovaný od verzie 2.6)
- DOS (nepodporovaný od verzie 2.0)
- IRIX 4 (nepodporovaný od verzie 2.3)
- IRIX 5 a novšie (nepodporované od verzií 3.2 a 3.7)[20]
- Mac OS 9 (nepodporovaný od verzie 2.4)
- MINIX (nepodporovaný od verzie 2.3)
- OpenVMS (nepodporovaný od verzie 3.3)
- OS/2 (nepodporovaný od verzie 3.3)
- RISC OS (nepodporovaný od verzie 3.0)
- Windows: Verzie systému Windows spravidla dostávajú plnú podporu prvej úrovne, kým sa na ne vzťahuje politika rozšírenej podpory spoločnosti Microsoft. Keď sa rozšírená podpora staršej verzie Windows skončí, projekt ju v nasledujúcom hlavnom vydaní Pythonu (X.Y.0) prestane podporovať. Opravné vydania (X.Y.Z) každej vývojovej vetvy si však zachovajú podporu všetkých verzií Windows, ktoré podporovalo pôvodné vydanie X.Y.0. Edície Windows určené pre vstavané systémy a internet vecí (IoT) sú mimo rozsahu oficiálnej podpory Pythonu.
- Windows 2000 (nepodporovaný od verzie 3.3)
- Windows 3.x (nepodporovaný od verzie 2.0)
- Windows 9x (nepodporovaný od verzie 2.6)
- Windows NT4 (nepodporovaný od verzie 2.6)
Externé porty, ktoré nie sú začlenené do oficiálnej verzie CPythonu od Python Software Foundation (s odkazmi na ich hlavné vývojové stránky), často obsahujú ďalšie moduly pre funkcie špecifické pre danú platformu, napríklad rozhrania pre grafiku a zvuk pre PSP a rozhrania pre SMS a fotoaparát pre S60. K týmto portom patria:
- Amiga: AmigaPython[21]
- DOS s nástrojom DJGPP: PythonD[22]
- MorphOS: Python 2 a 3[23]
- PlayStation Portable: Stackless Python for PSP[24]
- Symbian OS: Python for S60
- Windows CE/Pocket PC: Python Windows CE port[25]
- OpenVMS: porty Pythonu 3.x udržiava spoločnosť VSI[26]
Alternatívy
[upraviť | upraviť zdroj]CPython je jednou z niekoľkých implementácií Pythonu „produkčnej kvality“. Ďalšie sú Jython napísaný v jazyku Java pre virtuálny stroj Javy (JVM), PyPy napísaný v jazyku RPython a preložený do jazyka C a IronPython napísaný v jazyku C# pre Common Language Infrastructure. Existuje aj niekoľko experimentálnych implementácií.[27]
Referencie
[upraviť | upraviť zdroj]- 1 2 Glossary [online]. Python Software Foundation, [cit. 2026-10-17]. Dostupné online. (po anglicky)
- ↑ Thread states and the global interpreter lock [online]. Python Software Foundation, [cit. 2026-10-17]. Dostupné online. (po anglicky)
- ↑ EDGE, Jake. A per-interpreter GIL [online]. LWN, 2023-08-15, [cit. 2024-01-13]. Dostupné online. (po anglicky)
- ↑ PEP 684 – A Per-Interpreter GIL [online]. peps.python.org, [cit. 2024-01-13]. Dostupné online. (po anglicky)
- ↑ PEP 703 – Making the Global Interpreter Lock Optional in CPython [online]. peps.python.org, [cit. 2023-09-17]. Dostupné online. (po anglicky)
- ↑ PEP 719 – Python 3.13 Release Schedule [online]. peps.python.org, [cit. 2023-09-17]. Dostupné online. (po anglicky)
- ↑ Python Release Python 3.13.0 [online]. Python.org, [cit. 2025-03-28]. Dostupné online. (po anglicky)
- 1 2 3 What's new in Python 3.14 [online]. Python Software Foundation, [cit. 2026-10-17]. Dostupné online. (po anglicky)
- 1 2 WINTER, Collin; YASSKIN, Jeffrey; KLECKNER, Reid. PEP 3146 – Merging Unladen Swallow into CPython [online]. Python.org, 2010-03-17. Dostupné online. (po anglicky)
- ↑ WILLIS, Nathan. Unladen swallow: accelerating Python [online]. LWN, 2009-05-06, [cit. 2026-10-01]. Dostupné online. (po anglicky)
- ↑ KLECKNER, Reid. Unladen Swallow Retrospective [online]. QINSB is not a Software Blog (qinsb.blogspot.com), 2011-03-26. Dostupné online. (po anglicky)
- ↑ Issue 9410: Add Unladen Swallow's optimizations to Python 3's pickle. – Python tracker [online]. bugs.python.org, [cit. 2019-08-08]. Dostupné online. (po anglicky)
- ↑ SHANNON, Mark. PEP 659 – Specializing Adaptive Interpreter [online]. peps.python.org, 2021-04-13. Dostupné online. (po anglicky)
- ↑ GALINDO SALGADO, Pablo. What's new in Python 3.11 § PEP 659: Specializing Adaptive Interpreter [online]. Python Software Foundation. Dostupné online. (po anglicky)
- ↑ BUCHER, Brandt; OSTROWSKI, Savannah. PEP 744 – JIT Compilation [online]. peps.python.org, 2024-04-11, [cit. 2025-02-05]. Dostupné online. (po anglicky)
- ↑ What's new in Python 3.15 [online]. Python Software Foundation, [cit. 2026-10-17]. Dostupné online. (po anglicky)
- 1 2 PEP 11 – Removing support for little used platforms [online]. Python.org, [cit. 2026-10-17]. Dostupné online. (po anglicky)
- ↑ Use Python wheels with ZOAU [online]. IBM (IBM Documentation), [cit. 2026-09-16]. Dostupné online. (po anglicky)
- ↑ IBM Open Enterprise SDK for Python [online]. IBM, [cit. 2026-09-16]. Dostupné online. (po anglicky)
- ↑ Irix still supported? [online]. python-dev (mailing list), 2009-02-14. Dostupné online. (po anglicky)
- ↑ AmigaPython Home Page [online]. www.monkeyhouse.eclipse.co.uk, [cit. 2025-02-20]. Dostupné online. Archivované 2012-03-24 z originálu. (po anglicky)
- ↑ PythonD 32bit Python for DOS and Windows [online]. www.caddit.net, [cit. 2025-02-20]. Dostupné online. (po anglicky)
- ↑ Python [online]. yellowblue.free.fr, [cit. 2026-10-01]. Dostupné online. (po anglicky)
- ↑ PSP-StacklessPython: Stackless Python 2.5 port for Sony PSP [online]. GitHub, [cit. 2026-10-01]. Dostupné online. (po anglicky)
- ↑ Python Windows CE port [online]. SourceForge, 2018-01-22, [cit. 2025-02-20]. Dostupné online. (po anglicky)
- ↑ Python [online]. VSI, [cit. 2021-08-31]. Dostupné online. Archivované 2025-01-02 z originálu. (po anglicky)
- ↑ MARTELLI, Alex. Python in a Nutshell. 2. vyd. [s.l.] : O'Reilly, 2006. ISBN 978-0-596-10046-9. S. 5–7. (po anglicky)
Ďalšia literatúra
[upraviť | upraviť zdroj]- SHAW, Anthony. CPython Internals: Your Guide to the Python 3 Interpreter. [s.l.] : Real Python, 2021. ISBN 9781775093343. (po anglicky)
Externé odkazy
[upraviť | upraviť zdroj]- CPython na GitHube (po anglicky)
Zdroj
[upraviť | upraviť zdroj]Tento článok je čiastočný alebo úplný preklad článku CPython na anglickej Wikipédii.