PyPy | |
---|---|
Typ | Python interpret a kompilátor |
Zapsáno v | RPython |
Operační systém | Křížová platforma |
První vydání | 2002 |
Nejnovější verze | 7.3.9 [1] ( 30. března 2022 ) |
Stát | Implementace Pythonu 2.7.18, 3.6.12 a 3.7.9 |
Licence | licence MIT |
webová stránka | pypy.org |
PyPy je interpret pro programovací jazyk Python . PyPy ve svých počátcích byl interpret Pythonu napsaný v Pythonu. Aktuální verze PyPy jsou přeloženy z RPythonu do C a zkompilovány. PyPy má vestavěný trace JIT , který dokáže za běhu změnit kód Pythonu na strojový kód .
PyPy bylo zamýšleno jako implementace Pythonu napsaná v Pythonu. Skutečnost, že PyPy je implementován v jazyce na vysoké úrovni, umožňuje flexibilnější a snazší experimentování s novými funkcemi než CPython a je snadné odhalit oblasti, kde jej lze zlepšit.
PyPy si klade za cíl poskytnout jediný mechanismus překladu. Podporuje rámec pro implementaci dynamických programovacích jazyků a vynucuje jasné oddělení mezi specifikací jazyka a implementací.
Jeho cílem je také poskytnout kompatibilitu, flexibilitu a rychlou implementaci programovacího jazyka Python a umožňuje implementaci nových funkcí bez nutnosti programování v jazyce nízké úrovně [2] .
PyPy se skládá ze standardního tlumočníka a překladatele.
Interpret plně implementuje jazyk Python. Samotný interpret je napsán v omezené podmnožině stejného jazyka zvaného RPython (Restricted Python). Na rozdíl od standardního Pythonu je RPython staticky typován pro efektivnější kompilaci [3] .
Překladač je sada nástrojů, která analyzuje kód RPythonu a překládá jej do jazyků nižší úrovně, jako je C , Java bytecode nebo CIL . Podporuje také zásuvné sběrače odpadu a umožňuje volitelně povolit Stackless . Obsahuje také JIT kompilátor pro překlad kódu do strojových instrukcí během provádění programu.
Kompilátor jazyka RPython lze také použít k psaní interpretů pro jiné programovací jazyky. Přidáním do kódu takového interpretu importem třídy JitDriver a vytvořením její instance a poté předáním této třídy seznamy globálních proměnných , proměnlivých a nezměněných během provádění programu, a také vytvořením několika zjevnějších deklarací , po překladu s příznakem --opt=jit:získáme funkční překladač jazyka JIT [4] .
PyPy je pokračováním projektu Psyco , JIT kompilátoru pro Python, který vyvinul Armin Rigo. Cílem PyPy je mít JIT kompilátor s pokrytím, které nebylo dostupné pro Psyco. PyPy začal jako výzkumný projekt pro vývojáře.
Když projekt dosáhl zralé fáze vývoje a oficiálního vydání 1.0 v polovině roku 2007, další důraz byl kladen na vydání verze připravené pro produkční provoz s větší kompatibilitou s CPythonem.
Verze 1.1 byla vydána 28. dubna 2009.
V březnu 2010 vyšla verze 1.2, ve které byla věnována zvláštní pozornost rychlosti. Tato verze obsahuje kompilátor JIT, který funguje, ale nedoporučuje se pro produkční použití.
26. listopadu 2010 byla vydána verze 1.4. Tato verze poprvé v režimu kompilátoru JIT překonává CPython [5] v rychlosti . Vývojáři také věří, že tato verze je připravena k použití ve výrobě [6] .
V rámci PyPy se vyvíjí speciální verze interpretu pypy-stm, který implementuje softwarovou transakční paměť [7] [8] . Použití transakční paměti se zbaví GIL a usnadní paralelizaci aplikací Pythonu na vícejádrových systémech.
9. května 2013 vyšla druhá verze PyPy, mezi jejíž novinky patří bezzásobníkový režim a nové rozhraní pro práci s externími funkcemi v jazyce C - cffi [9] .
10. března 2016 byla vydána pátá verze PyPy s vylepšeními výkonu a CPython API se dočkalo mnoha vylepšení [10] .
9. srpna 2016 obdržel PyPy od Mozilly finanční prostředky ve výši 200 000 $ na podporu Pythonu 3.5 [11] .
12. listopadu 2016 vyšla PyPy2 v5.6, nejdůležitější změnou je standardní knihovna Python 2.7.12
Od roku 2017 PyPy upustilo od JVM , CIL , JavaScriptu [12] jako backendů.
Verze 5.6.0 je kompatibilní s Pythonem 2.7.12 a může běžet na 32bitových i 64bitových platformách (kromě Windows, kde je podporováno pouze 32bitové [13] ). PyPy plně podporuje moduly napsané v čistém Pythonu. Pro použití binárních rozšíření (.so a .pyd) má PyPy dobrou podporu pro CPython API ve formě samostatného modulu cpyext. Tato rozšíření vyžadují rekompilaci, aby správně fungovala [14] .
PyPy3 verze 5.5 je kompatibilní s CPythonem 3.3.5 [15] .
Existuje také aktivní vývoj PyPy3.5, který implementuje Python 3.5.
Je známo, že v PyPy fungují následující knihovny a rámce [14] :
Krajta | |
---|---|
Společenství | |
Implementace | |
jiný |
|