PyPy | |
---|---|
Sorts | Python- tolkare och kompilator |
Skrivet i | RPython |
Operativ system | Cross plattform |
Första upplagan | 2002 |
senaste versionen | 7.3.9 [1] ( 30 mars 2022 ) |
stat | Implementering av Python 2.7.18, 3.6.12 och 3.7.9 |
Licens | MIT-licenser |
Hemsida | pypy.org |
PyPy är en tolk för programmeringsspråket Python . PyPy i dess tidiga dagar var en Python-tolk skriven i Python. Aktuella versioner av PyPy är översatta från RPython till C och kompilerade. PyPy har en inbyggd - JIT-kompilator som kan förvandla Python-kod till maskinkod vid körning.
PyPy var tänkt att vara en Python-implementation skriven i Python. Det faktum att PyPy är implementerat i ett språk på hög nivå gör det mer flexibelt och lättare att experimentera med nya funktioner än CPython , och det är lätt att upptäcka områden där det kan förbättras.
PyPy syftar till att tillhandahålla en enda översättningsmekanism. Det stöder ett ramverk för att implementera dynamiska programmeringsspråk och tvingar fram en tydlig åtskillnad mellan språkspecifikation och implementering.
Det syftar också till att tillhandahålla kompatibilitet, flexibilitet och snabb implementering av programmeringsspråket Python, och tillåter att nya funktioner implementeras utan behov av språkprogrammering på låg nivå [2] .
PyPy består av en standardtolk och översättare.
Tolken implementerar Python-språket fullt ut. Själva tolken är skriven i en begränsad delmängd av samma språk som kallas RPython (Restricted Python). Till skillnad från standard Python är RPython statiskt typad för effektivare kompilering [3] .
En översättare är en uppsättning verktyg som analyserar RPython-kod och översätter den till lägre nivåspråk som C , Java bytecode eller CIL . Den stöder även pluggbara sophämtare och låter dig aktivera Stackless valfritt . Den innehåller också en JIT -kompilator för att översätta kod till maskininstruktioner under programexekveringen.
RPython-språkkompilatorn kan också användas för att skriva tolkar för andra programmeringsspråk. Genom att lägga till importen av JitDriver- klassen till koden för en sådan tolk och skapa en instans av den, och sedan överföra listorna med globala variabler till denna klass , föränderliga och oförändrade under programkörning, samt göra några mer uppenbara deklarationer , efter översättning med flaggan --opt=jit:får vi en fungerande JIT- språkkompilator [4] .
PyPy är en fortsättning på Psyco- projektet , en JIT-kompilator för Python utvecklad av Armin Rigo. Målet med PyPy är att ha en JIT-kompilator med täckning som inte var tillgänglig för Psyco. PyPy startade som ett forskningsprojekt för utvecklare.
När projektet nådde ett moget utvecklingsstadium och en officiell 1.0-release i mitten av 2007, var nästa fokus på att släppa en produktionsklar version med större kompatibilitet med CPython.
Version 1.1 släpptes den 28 april 2009.
I mars 2010 släpptes version 1.2, där särskild uppmärksamhet ägnades åt hastighet. Denna version innehåller en JIT-kompilator som fungerar men som inte rekommenderas för produktionsanvändning.
Den 26 november 2010 släpptes version 1.4. Denna version för första gången i JIT-kompilatorläge överträffar CPython [5] i hastighet . Utvecklarna tror också att denna version är redo att användas i produktionen [6] .
Inom PyPy utvecklas en speciell version av pypy-stm-tolken, som implementerar transaktionsminne för programvara [7] [8] . Att använda transaktionsminne kommer att bli av med GIL och göra det lättare att parallellisera Python-applikationer på flerkärniga system.
Den 9 maj 2013 släpptes den andra versionen av PyPy, vars innovationer inkluderar stackless mode och ett nytt gränssnitt för att arbeta med externa funktioner i C-språket - cffi [9] .
Den 10 mars 2016 släpptes den femte versionen av PyPy med prestandaförbättringar, och CPython API fick många förbättringar [10] .
Den 9 augusti 2016 fick PyPy 200 000 $ finansiering från Mozilla för att stödja Python 3.5 [11] .
Den 12 november 2016 släpptes PyPy2 v5.6, den viktigaste förändringen är Python 2.7.12 standardbiblioteket
Från och med 2017 har PyPy släppt JVM , CIL , JavaScript [12] som backends.
Version 5.6.0 är kompatibel med Python 2.7.12 och kan köras på 32-bitars och 64-bitars plattformar (förutom Windows, där endast 32-bitars stöds [13] ). PyPy stöder fullt ut moduler skrivna i ren Python. För att använda binära tillägg (.so och .pyd) har PyPy bra stöd för CPython API i form av en separat cpyext-modul. Dessa tillägg kräver omkompilering för att fungera korrekt [14] .
PyPy3 version 5.5 är kompatibel med CPython 3.3.5 [15] .
Det pågår också aktiv utveckling av PyPy3.5, som implementerar Python 3.5.
Följande bibliotek och ramverk är kända för att fungera i PyPy [14] :
Pytonorm | |
---|---|
gemenskap | |
Genomföranden | |
Övrig |
|