PyPy - PyPy
| Versione iniziale | metà 2007 |
|---|---|
| Rilascio stabile | 7.3.5 / 23 maggio 2021
|
| Repository | |
| Scritto in | RPython |
| Sistema operativo | Multipiattaforma |
| Tipo | Interprete Python e toolchain del compilatore |
| Licenza | MIT |
| Sito web |
pypy |
PyPy ( / p aɪ p aɪ / ) è 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
- Bootstrapping (compilatori)
- Cython
- GraalVM
- Valutazione parziale
- Psico
- Self-hosting
- Auto-interprete
- Rondine a vuoto
Appunti
Riferimenti
- Davide Ancona, Massimo Ancona, Antonio Cuni, Nicholas D. Matsakis, 2007. RPython: un passo verso la riconciliazione di linguaggi OO tipizzati in modo dinamico e statico . In Proc. Simposio linguistico dinamico (DLS), 2007. ACM Press.
- Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, 2009. Tracciare il meta-livello: Compilatore JIT di tracciamento di PyPy . In Proc. ICOOOOLPS, 2009. ACM Press.
- Corbet, Jonathan (11 maggio 2011). "Un breve esperimento con PyPy" . LWN.net .
- von Eitzen, Chris (21 novembre 2011). "PyPy 1.7 amplia la performance "sweet spot " " . L'H . Heinz Heise .
- Rosa, Giovanni (2 dicembre 2011). "Una giornata con PyPy" . Blog degli sviluppatori Oracle .
- "Intervista Maciej Fijalkowski pypy" . Blog Decisionstats. 29 novembre 2015.