PyPy - PyPy
| Eliberarea inițială | mijlocul anului 2007 |
|---|---|
| Versiune stabila | 7.3.5 / 23 mai 2021
|
| Repertoriu | |
| Scris in | RPython |
| Sistem de operare | Cross-platform |
| Tip | Interpretor și compilator Python lanț de instrumente |
| Licență | MIT |
| Site-ul web |
pypy |
PyPy ( / p aɪ p aɪ / ) este o implementare alternativă a Python limbaj de programare pentru CPython (care este implementarea standard). PyPy rulează adesea mai repede decât CPython, deoarece PyPy este un compilator just-in-time, în timp ce CPython este un interpret . Majoritatea codului Python funcționează bine pe PyPy, cu excepția codului care depinde de extensiile CPython, care fie nu funcționează, fie implică unele cheltuieli generale atunci când rulează în PyPy. Pe plan intern, PyPy folosește o tehnică cunoscută sub numele de meta-trasare, care transformă un interpret într-un compilator de urmărire just-in-time . Deoarece interpretii sunt de obicei mai ușor de scris decât compilatoarele, dar rulează mai lent, această tehnică poate face mai ușoară producerea de implementări eficiente ale limbajelor de programare. Lanțul de instrumente meta-trasare PyPy se numește RPython .
PyPy nu are compatibilitate deplină cu versiunile mai recente ale ecosistemului CPython. Cu acesta, pretinde doar compatibilitatea cu sintaxa Python 2.7 și 3.6 și 3.7 (calitate beta, cu „câteva” caracteristici lipsă); pierde din sintaxa mai nouă în Python 3.8, 3.9 etc., cum ar fi expresiile de atribuire și parametrii de poziție; și viitoarea sintaxă Python 3.10, cum ar fi potrivirea modelelor .
Detalii și motivație
PyPy a fost conceput pentru a fi o implementare a Python scrisă într-un limbaj de programare similar cu Python. Acest lucru facilitează identificarea zonelor în care poate fi îmbunătățit și face PyPy mai flexibil și mai ușor de experimentat decât CPython .
PyPy își propune să ofere un cadru comun de traducere și suport pentru producerea de implementări de limbaje dinamice , subliniind o separare curată între specificațiile de limbă și aspectele de implementare. De asemenea, își propune să ofere o implementare conformă, flexibilă și rapidă a limbajului de programare Python folosind cadrul de mai sus pentru a permite noi caracteristici avansate fără a fi nevoie să codificați detalii de nivel scăzut în acesta.
RPython
Interpretul PyPy în sine este scris într-un subset restrâns de Python numit RPython (Restricted Python). RPython pune unele constrângeri asupra limbajului Python, astfel încât tipul unei variabile poate fi dedus la momentul compilării.
Proiectul PyPy a dezvoltat un toolchain care analizează codul RPython și traduce într - o formă de cod de octet, care poate fi coborât în C . Înainte de C: Java, CSharp și Javascript existau și alte backend-uri, dar cele sufereau de bitrot și au fost eliminate. Astfel, logo-ul recursiv al PyPy este un șarpe care se înghite, deoarece RPython este tradus de un interpret Python. Codul poate fi, de asemenea, rulat netradus pentru testare și analiză, ceea ce oferă un pat de test frumos pentru cercetarea limbajelor dinamice.
Permite colectarea de gunoi care poate fi conectată , precum și activarea opțională a funcțiilor Stackless Python . În cele din urmă, include un generator JIT (just-in-time) care construiește un compilator just-in-time în interpret, având în vedere câteva adnotări în codul sursă al interpretului. Compilatorul JIT generat este un JIT de urmărire .
RPython este acum folosit și pentru a scrie implementări de limbaj non-Python, cum ar fi Pixie .
Starea proiectului
PyPy ca versiunea 7.3.3 este compatibilă cu trei CPython versiuni: 2.7.18, 3.6.12 și 3.7.9 (suport de calitate beta pentru Python 3.7) Prima versiune PyPy compatibila cu CPython v3 este PyPy V2.3.1 (2014). Interpretul PyPy compatibil cu CPython v3 este cunoscut și sub numele de PyPy3.
PyPy are suport pentru compilarea JIT pe procesoarele ARM pe 32 biți / 64 biți x86 și 32 biți / 64 biți . Este testat noaptea pe Windows, Linux, OpenBSD și Mac OS X. PyPy este capabil să ruleze software Python pur care nu se bazează pe caracteristici specifice implementării.
Există un strat de compatibilitate pentru extensiile API CPython C numit CPyExt, dar este incomplet și experimental. Modul preferat de interfață cu bibliotecile partajate C este prin interfața C cu funcție externă încorporată (CFFI) sau bibliotecile ctypes .
Istorie
PyPy este o continuare a proiectului Psyco , un compilator specializat just-in-time pentru Python, dezvoltat de Armin Rigo între 2002 și 2010. Scopul PyPy este de a avea un compilator specializat just-in-time cu scop, care nu era disponibil pentru Psyco. Inițial, RPython putea fi, de asemenea, compilat în cod bytec Java , CIL și JavaScript , dar aceste backend-uri au fost eliminate din cauza lipsei de interes.
PyPy a fost inițial un proiect orientat spre cercetare și dezvoltare. Ajungând la o stare matură de dezvoltare și o lansare oficială 1.0 la mijlocul anului 2007, următoarea sa concentrare a fost lansarea unei versiuni gata de producție cu mai multă compatibilitate CPython. Multe dintre modificările PyPy au fost făcute în timpul sprinturilor de codare .
- În august 2008, PyPy a reușit să ruleze câteva biblioteci populare Python precum Pylons , Pyglet , Nevow și Django .
- Pe 12 martie 2010, PyPy 1.2 a fost lansat, concentrându-se pe viteză. Acesta a inclus un compilator funcțional, deși nu este încă stabil, exact la timp.
- La 30 aprilie 2011, a fost lansată versiunea PyPy 1.5, care a atins compatibilitatea cu CPython 2.7.
- Pe 9 mai 2013, a fost lansat PyPy 2.0, care a introdus suport de calitate alfa pentru compilarea JIT pe ARMv6 și ARMv7 JIT și a inclus CFFI în biblioteca standard.
- Pe 20 iunie 2014, PyPy3 a fost declarat stabil și a introdus compatibilitatea cu mai modernul Python 3. A fost lansat alături de PyPy 2.3.1 și poartă același număr de versiune.
- Pe 21 martie 2017, proiectul PyPy a lansat versiunea 5.7 atât a PyPy, cât și a PyPy3, acesta din urmă introducând suport de calitate beta pentru Python 3.5.
- Pe 26 aprilie 2018, a fost lansată versiunea 6.0, cu suport pentru Python 2.7 și 3.5 (încă de calitate beta pe Windows).
- La 11 februarie 2019, a fost lansată versiunea 7.0, cu suport pentru Python 2.7 și 3.5.
- Pe 14 octombrie 2019, a fost lansată versiunea 7.2, cu suport pentru Python 3.6.9.
- Pe 24 decembrie 2019, a fost lansată versiunea 7.3, cu suport pentru Python 3.6.9.
- La 16 februarie 2020, echipa PyPy a anunțat mutarea codului sursă care găzduiește de la Bitbucket la heptapod.net cu depozitele proiectului CFFI (C Foreign Function Interface ). Se publică, de asemenea, un nou logo și un site web. Cu toate acestea, autorul și licența noului logo nu sunt cunoscute.
Finanțarea
PyPy a fost finanțat de Uniunea Europeană, fiind un proiect specific de cercetare țintit între decembrie 2004 și martie 2007. În iunie 2008, PyPy a anunțat finanțarea care face parte din programele Google Open Source și a fost de acord să se concentreze pe a face PyPy mai compatibil cu CPython . În 2009 Eurostars, o agenție de finanțare a Uniunii Europene special concentrată pe IMM-uri , a acceptat o propunere din partea membrilor proiectului PyPy intitulată „PYJIT - un set de instrumente rapid și flexibil pentru limbaje de programare dinamice bazate pe PyPy”. Finanțarea Eurostars a durat până în august 2011. La PyCon SUA 2011, Python Software Foundation a acordat o subvenție de 10.000 USD pentru ca PyPy să continue activitatea de performanță și compatibilitate cu versiunile mai noi ale limbii. Portul către arhitectura ARM a fost sponsorizat în parte de Raspberry Pi Foundation .
Proiectul PyPy acceptă, de asemenea, donații prin intermediul paginilor sale de blog de stare. Începând cu 2013, o varietate de sub-proiecte aveau finanțare: compatibilitatea versiunii Python 3, suport integrat NumPy optimizat pentru calcule numerice și suport de memorie tranzacțională software pentru a permite un paralelism mai bun.
Vezi si
- Bootstrapping (compilatoare)
- Cython
- GraalVM
- Evaluare parțială
- Psyco
- Auto-găzduire
- Auto-interpret
- Rândunică neîncărcată
Note
Referințe
- Davide Ancona, Massimo Ancona, Antonio Cuni, Nicholas D. Matsakis, 2007. RPython: un pas spre reconcilierea limbajelor OO tipizate dinamic și static . În Proc. Dynamic Language Symposium (DLS), 2007. ACM Press.
- Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, 2009. Trasarea meta-nivelului: PyPy's Tracing JIT Compiler . În Proc. ICOOOLPS, 2009. ACM Press.
- Corbet, Jonathan (11 mai 2011). „Un scurt experiment cu PyPy” . LWN.net .
- von Eitzen, Chris (21 noiembrie 2011). „PyPy 1.7 lărgește performanța„ punct dulce ” „ . H . Heinz Heise .
- Rose, John (2 decembrie 2011). „O zi cu PyPy” . Blogul dezvoltatorului Oracle .
- „Interviu Maciej Fijalkowski pypy” . Blogul Decisionstats. 29 noiembrie 2015.