PyPy

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 17 mai 2022; verificarea necesită 1 editare .
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.

Obiectivele proiectului

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] .

Difuzare

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.

PyPy ca mijloc de implementare a interpreților

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] .

Istoricul proiectului

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

Backend-uri acceptate

Începând cu 2017, PyPy a renunțat la JVM , CIL , JavaScript [12] ca backend-uri.

Compatibilitate cu CPython

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] :

Vezi și

Note

  1. Versiunea de securitate PyPy v7.3.9 .
  2. Samuel Pedroni. PyPy - Prezentare generală a obiectivelor și arhitecturii (link indisponibil) (martie 2007). Arhivat din original la 30 iunie 2012. 
  3. „Este un subset propriu al Python, restricționat într-un mod care permite o analiză ușoară și generarea eficientă a codului”, Ancona și colab., 2007.
  4. Andrew Brown, Tutorial: Writing an Interpreter with PyPy, Part 1 Arhivat 3 martie 2012 la Wayback Machine , Partea 2: Adăugarea unui JIT Arhivat 3 martie 2012 la Wayback Machine , Tutorial: Writing a JIT
    Interpreter with PyPy (traducere) Arhivat 20 august 2016 la Wayback Machine ,
    Repository ref. Cod arhivat 26 ianuarie 2012 la Wayback Machine
    Articolul descrie implementarea Brainfuck pe RPython
  5. PyPy Speed ​​​​Center: Comparație . Consultat la 28 noiembrie 2010. Arhivat din original la 2 aprilie 2012.
  6. PyPy Status Blog: PyPy 1.4: Ouroboros in practice . Consultat la 28 noiembrie 2010. Arhivat din original pe 9 martie 2012.
  7. PyPy Status Blog „Global Interpreter Lock, or how to kill it” . Data accesului: 19 mai 2012. Arhivat din original pe 22 mai 2012.
  8. pypy-stm introdus . Preluat la 19 mai 2012. Arhivat din original la 13 mai 2012.
  9. Lansarea PyPy 2.0, o implementare Python scrisă în limbajul Python (downlink) . opennet.ru (10 mai 2013). Consultat la 21 mai 2013. Arhivat din original pe 7 iunie 2013. 
  10. PyPy Status Blog: PyPy 5.0 lansat . morepypy.blogspot.ru. Preluat la 18 august 2016. Arhivat din original la 13 martie 2016.
  11. PyPy Status Blog: PyPy primește finanțare de la Mozilla pentru suport pentru Python 3.5 . morepypy.blogspot.ru. Preluat la 18 august 2016. Arhivat din original la 18 martie 2017.
  12. [https://web.archive.org/web/20121009143354/http://www.mail-archive.com/[email protected]/msg03946.html Arhivat pe 9 octombrie 2012 la Wayback Machine Re: [pypy-dev] pypy pare să fi eliminat în întregime orice mențiune despre javascript]
  13. Traducerea în documentația Windows - PyPy . doc.pypy.org. Consultat la 12 noiembrie 2016. Arhivat din original pe 13 noiembrie 2016.
  14. 1 2 PyPy :: Compatibilitate Python . Consultat la 30 noiembrie 2010. Arhivat din original pe 7 iunie 2021.
  15. PyPy3 v5.5 lansat . doc.pypy.org. Preluat la 25 august 2016. Arhivat din original la 18 octombrie 2016.
  16. Starea NumPyPy . buildbot.pypy.org. Preluat la 25 august 2016. Arhivat din original la 16 octombrie 2013.

Literatură

Link -uri