PyPy - PyPy

PyPy
Pypy logo.png
Versione iniziale metà 2007 ; 14 anni fa ( 2007 )
Rilascio stabile
7.3.5 / 23 maggio 2021 ; 4 mesi fa ( 2021-05-23 )
Repository
Scritto in RPython
Sistema operativo Multipiattaforma
Tipo Interprete Python e toolchain del compilatore
Licenza MIT
Sito web pypy .org Modificalo su Wikidata

PyPy ( / p p / ) è un'implementazione alternativa del Python linguaggio di programmazione per CPython (che è l'implementazione standard). PyPy spesso viene eseguito più velocemente di CPython perché PyPy è un compilatore just-in-time mentre CPython è un interprete . La maggior parte del codice Python funziona bene su PyPy ad eccezione del codice che dipende dalle estensioni CPython, che non funziona o comporta un sovraccarico quando viene eseguito in PyPy. Internamente, PyPy utilizza una tecnica nota come meta-traccia, che trasforma un interprete in un compilatore just-in-time di traccia . Poiché gli interpreti sono generalmente più facili da scrivere rispetto ai compilatori, ma funzionano più lentamente, questa tecnica può rendere più semplice la produzione di implementazioni efficienti dei linguaggi di programmazione. La toolchain di meta-tracciamento di PyPy si chiama RPython .

PyPy non ha piena compatibilità con le versioni più recenti dell'ecosistema CPython. Con esso solo rivendicando la compatibilità con la sintassi Python 2.7 e 3.6 e 3.7 (qualità beta, con "poche" funzionalità mancanti); perde la sintassi più recente in Python 3.8, 3.9 ecc. come espressioni di assegnazione e parametri solo posizionali; e la prossima sintassi di Python 3.10, come il pattern matching .

Dettagli e motivazione

PyPy è stato concepito per essere un'implementazione di Python scritta in un linguaggio di programmazione simile a Python. Ciò semplifica l'identificazione delle aree in cui può essere migliorato e rende PyPy più flessibile e più facile da sperimentare rispetto a CPython .

PyPy mira a fornire una traduzione comune e un framework di supporto per la produzione di implementazioni di linguaggi dinamici , sottolineando una netta separazione tra le specifiche del linguaggio e gli aspetti di implementazione. Mira inoltre a fornire un'implementazione conforme, flessibile e veloce del linguaggio di programmazione Python utilizzando il framework di cui sopra per abilitare nuove funzionalità avanzate senza dover codificare dettagli di basso livello in esso.

RPython

L'interprete PyPy stesso è scritto in un sottoinsieme limitato di Python chiamato RPython (Restricted Python). RPython pone alcuni vincoli al linguaggio Python in modo tale che il tipo di una variabile possa essere dedotto in fase di compilazione.

Il progetto PyPy ha sviluppato una toolchain che analizza il codice RPython e lo traduce in una forma di codice byte, che può essere ridotto in C . C'erano altri backend oltre a C: Java, CSharp e Javascript, ma quelli soffrivano di bitrot e sono stati rimossi. Quindi il logo ricorsivo di PyPy è un serpente che si ingoia poiché RPython è tradotto da un interprete Python. Il codice può anche essere eseguito non tradotto per test e analisi, il che fornisce un buon banco di prova per la ricerca sui linguaggi dinamici.

Consente l'utilizzo di raccoglitori di rifiuti collegabili , oltre a consentire facoltativamente le funzionalità Stackless Python . Infine, include un generatore just-in-time (JIT) che costruisce un compilatore just-in-time nell'interprete, date alcune annotazioni nel codice sorgente dell'interprete. Il compilatore JIT generato è un JIT di traccia .

RPython è ora utilizzato anche per scrivere implementazioni di linguaggi non Python come Pixie .

Stato del progetto

PyPy dalla versione 7.3.3 è compatibile con tre versioni di CPython : 2.7.18, 3.6.12 e 3.7.9 (supporto di qualità beta per Python 3.7) La prima versione PyPy compatibile con CPython v3 è PyPy v2.3.1 (2014). L'interprete PyPy compatibile con CPython v3 è anche conosciuto come PyPy3.

PyPy ha compilazione JIT supporto / 64 bit a 32 bit x 86 e / 64-bit a 32 bit ARM processori. È testato ogni notte su Windows, Linux, OpenBSD e Mac OS X. PyPy è in grado di eseguire software Python puro che non si basa su funzionalità specifiche dell'implementazione.

Esiste un livello di compatibilità per le estensioni API CPython C chiamato CPyExt, ma è incompleto e sperimentale. Il modo preferito per interfacciarsi con le librerie condivise C è tramite l' interfaccia di funzione esterna C incorporata (CFFI) o le librerie ctypes .

Storia

PyPy è il seguito del progetto Psyco , un compilatore specializzato just-in-time per Python, sviluppato da Armin Rigo tra il 2002 e il 2010. L'obiettivo di PyPy è quello di avere un compilatore specializzato just-in-time con scope, che non era disponibile per Psico. Inizialmente, RPython poteva anche essere compilato in Java bytecode , CIL e JavaScript , ma questi backend sono stati rimossi per mancanza di interesse.

PyPy era inizialmente un progetto orientato alla ricerca e allo sviluppo. Raggiungendo uno stato di sviluppo maturo e una versione 1.0 ufficiale a metà del 2007, il suo obiettivo successivo è stato quello di rilasciare una versione pronta per la produzione con maggiore compatibilità con CPython. Molte delle modifiche di PyPy sono state apportate durante gli sprint di codifica .

  • Nell'agosto 2008, PyPy è stato in grado di eseguire alcune popolari librerie Python come Pylons , Pyglet , Nevow e Django .
  • Il 12 marzo 2010 è stato rilasciato PyPy 1.2, incentrato sulla velocità. Includeva un compilatore just-in-time funzionante, anche se non ancora stabile.
  • Il 30 aprile 2011 è stata rilasciata la versione 1.5 di PyPy, che ha raggiunto la compatibilità con CPython 2.7.
  • Il 9 maggio 2013, è stato rilasciato PyPy 2.0, che ha introdotto il supporto di qualità alfa per la compilazione JIT su ARMv6 e ARMv7 JIT e ha incluso CFFI nella libreria standard.
  • Il 20 giugno 2014, PyPy3 è stato dichiarato stabile e ha introdotto la compatibilità con il più moderno Python 3. È stato rilasciato insieme a PyPy 2.3.1 e porta lo stesso numero di versione.
  • Il 21 marzo 2017, il progetto PyPy ha rilasciato la versione 5.7 di PyPy e PyPy3, con quest'ultimo che ha introdotto il supporto di qualità beta per Python 3.5.
  • Il 26 aprile 2018 è stata rilasciata la versione 6.0, con supporto per Python 2.7 e 3.5 (ancora di qualità beta su Windows).
  • L'11 febbraio 2019 è stata rilasciata la versione 7.0, con supporto per Python 2.7 e 3.5.
  • Il 14 ottobre 2019 è stata rilasciata la versione 7.2, con supporto per Python 3.6.9.
  • Il 24 dicembre 2019 è stata rilasciata la versione 7.3, con supporto per Python 3.6.9.
  • Il 16 febbraio 2020, il team PyPy ha annunciato il trasferimento dell'hosting del codice sorgente da Bitbucket a heptapod.net con i repository del progetto CFFI (C Foreign Function Interface ). Pubblicato anche il nuovo logo e il design del sito web. Tuttavia l'autore e la licenza del nuovo logo sono sconosciuti.

Finanziamento

PyPy è stato finanziato dall'Unione Europea come progetto di ricerca mirato specifico tra dicembre 2004 e marzo 2007. Nel giugno 2008, PyPy ha annunciato che il finanziamento faceva parte dei programmi Open Source di Google e ha deciso di concentrarsi sul rendere PyPy più compatibile con CPython . Nel 2009 Eurostars, un'agenzia di finanziamento dell'Unione Europea focalizzata specialmente sulle PMI , ha accettato una proposta dei membri del progetto PyPy intitolata "PYJIT – un toolkit veloce e flessibile per linguaggi di programmazione dinamici basati su PyPy". Il finanziamento di Eurostars è durato fino ad agosto 2011. A PyCon US 2011, la Python Software Foundation ha fornito una sovvenzione di $ 10.000 per PyPy per continuare a lavorare sulle prestazioni e la compatibilità con le versioni più recenti del linguaggio. Il port sull'architettura ARM è stato in parte sponsorizzato dalla Raspberry Pi Foundation .

Il progetto PyPy accetta anche donazioni attraverso le sue pagine del blog di stato. A partire dal 2013, una varietà di sottoprogetti ha ricevuto finanziamenti: compatibilità della versione Python 3, supporto NumPy ottimizzato integrato per calcoli numerici e supporto della memoria transazionale software per consentire un migliore parallelismo.

Guarda anche

Appunti

Riferimenti

link esterno