PyPy | |
---|---|
Tip de | interpret și compilator Python |
Scris in | RPython |
Sistem de operare | Platformă transversală |
Prima editie | 2002 |
ultima versiune | 7.3.9 [1] ( 30 martie 2022 ) |
Stat | Implementarea Python 2.7.18, 3.6.12 și 3.7.9 |
Licență | licențe MIT |
Site-ul web | pypy.org |
PyPy este un interpret pentru limbajul de programare Python . PyPy la începuturile sale a fost un interpret Python scris în Python. Versiunile actuale de PyPy sunt traduse din RPython în C și compilate. PyPy are un compilator JIT urmărire încorporat care poate transforma codul Python în cod de mașină în timpul execuției.
PyPy a fost destinat să fie o implementare Python scrisă în Python. Faptul că PyPy este implementat într-un limbaj de nivel înalt îl face mai flexibil și mai ușor de experimentat cu noi funcții decât CPython și este ușor de identificat zonele în care poate fi îmbunătățit.
PyPy își propune să ofere un singur mecanism de traducere. Acceptă un cadru pentru implementarea limbajelor de programare dinamice și impune o separare clară între specificarea și implementarea limbajului.
De asemenea, își propune să ofere compatibilitate, flexibilitate și implementare rapidă a limbajului de programare Python și permite implementarea de noi caracteristici fără a fi nevoie de programare în limbaj de nivel scăzut [2] .
PyPy constă dintr-un interpret și un traducător standard.
Interpretul implementează pe deplin limbajul Python. Interpretul în sine este scris într-un subset limitat al aceluiași limbaj numit RPython (Restricted Python). Spre deosebire de Python standard, RPython este tipat static pentru o compilare mai eficientă [3] .
Un traducător este un set de instrumente care analizează codul RPython și îl traduce în limbaje de nivel inferior, cum ar fi C , Java bytecode sau CIL . De asemenea, acceptă colectoare de gunoi conectabile și vă permite să activați opțional Stackless . Include, de asemenea, un compilator JIT pentru traducerea codului în instrucțiuni de mașină în timpul execuției programului.
Compilatorul de limbaj RPython poate fi folosit și pentru a scrie interpreți pentru alte limbaje de programare. Adăugând la codul unui astfel de interpret importul clasei JitDriver și creând o instanță a acesteia, apoi trecând la această clasă listele de variabile globale , mutabile și neschimbate în timpul execuției programului, precum și făcând câteva declarații mai evidente. , după traducerea cu steag --opt=jit:, obținem un compilator de limbaj JIT funcțional [4] .
PyPy este o continuare a proiectului Psyco , un compilator JIT pentru Python dezvoltat de Armin Rigo. Scopul PyPy este de a avea un compilator JIT cu acoperire care nu era disponibilă pentru Psyco. PyPy a început ca un proiect de cercetare pentru dezvoltatori.
Când proiectul a atins un stadiu matur de dezvoltare și o lansare oficială 1.0 la jumătatea anului 2007, următorul accent a fost pe lansarea unei versiuni pregătite pentru producție, cu o compatibilitate mai mare cu CPython.
Versiunea 1.1 a fost lansată pe 28 aprilie 2009.
În martie 2010, a fost lansată versiunea 1.2, în care s-a acordat o atenție deosebită vitezei. Această versiune include un compilator JIT care funcționează, dar nu este recomandat pentru utilizare în producție.
Pe 26 noiembrie 2010, a fost lansată versiunea 1.4. Această versiune pentru prima dată în modul compilator JIT depășește CPython [5] în viteza . Dezvoltatorii cred, de asemenea, că această versiune este gata de utilizare în producție [6] .
În cadrul PyPy, se dezvoltă o versiune specială a interpretorului pypy-stm, care implementează memoria tranzacțională software [7] [8] . Utilizarea memoriei tranzacționale va scăpa de GIL și va facilita paralelizarea aplicațiilor Python pe sisteme multi-core.
Pe 9 mai 2013, a fost lansată a doua versiune a PyPy, ale cărei inovații includ modul stackless și o nouă interfață pentru lucrul cu funcții externe în limbajul C - cffi [9] .
Pe 10 martie 2016, a cincea versiune de PyPy a fost lansată cu îmbunătățiri de performanță, iar API -ul CPython a primit multe îmbunătățiri [10] .
Pe 9 august 2016, PyPy a primit o finanțare de 200.000 USD de la Mozilla pentru a sprijini Python 3.5 [11] .
Pe 12 noiembrie 2016, a fost lansat PyPy2 v5.6, cea mai importantă schimbare este biblioteca standard Python 2.7.12
Începând cu 2017, PyPy a renunțat la JVM , CIL , JavaScript [12] ca backend-uri.
Versiunea 5.6.0 este compatibilă cu Python 2.7.12 și poate rula pe platforme pe 32 și 64 de biți (cu excepția Windows, unde este acceptat doar 32 de biți [13] ). PyPy acceptă pe deplin modulele scrise în pur Python. Pentru utilizarea extensiilor binare (.so și .pyd), PyPy are un suport bun pentru API -ul CPython sub forma unui modul separat cpyext. Aceste extensii necesită recompilare pentru a funcționa corect [14] .
PyPy3 versiunea 5.5 este compatibilă cu CPython 3.3.5 [15] .
Există, de asemenea, o dezvoltare activă a PyPy3.5, care implementează Python 3.5.
Se știe că următoarele biblioteci și cadre funcționează în PyPy [14] :
Piton | |
---|---|
Comunitate | |
Implementări | |
Alte |
|