2009-03-06 10 views
28

Da quello che ho visto e letto sui blog, PyPy è un progetto molto ambizioso. Quali sono alcuni vantaggi che porteranno alla tabella sui suoi fratelli (CPython, Jython e IronPython)? È la velocità, la compatibilità multipiattaforma (comprese le piattaforme mobili), la possibilità di utilizzare le estensioni c senza il GIL, o si tratta più di un esercizio tecnico su cosa si può fare?Che cosa deve offrire PyPy su CPython, Jython e IronPython?

+1

FWIW puoi già utilizzare c-extensions su CPython senza GIL. È normale il codice Python (quando viene eseguito con i thread) che soffre davvero del GIL. – fuzzyman

risposta

38

PyPy è davvero due progetti:

  • Un interprete compilatore di strumenti che consente di scrivere interpreti in RPython (un sottoinsieme statico di Python) e di compilare interpreti multipiattaforma d standalone, per la JVM, per NET (ecc)
  • Un'implementazione di Python in RPython

Questi due progetti permettono molte cose.

  • Mantenere Python in Python è molto più facile che mantenere in C
  • Da un singolo codice di base è possibile generare interpreti Python che corrono sulla JVM, NET e indipendente - invece di avere più implementazioni leggermente incompatibili
  • parte della toolchain compilatore JIT include un generatore sperimentale (giunto alla sua quinta incarnazione e di iniziare a lavorare davvero bene) - l'obiettivo è per una JITed PyPy per eseguire molto più veloce rispetto CPython
  • è mu ch più facile sperimentare le caratteristiche fondamentali della lingua - come la rimozione della GIL, una migliore raccolta dei rifiuti, stackless integrazione e così via

Quindi ci sono davvero un sacco di ragioni per PyPy di ​​essere eccitante, ed è finalmente iniziando a vivere fino a tutte le sue promesse.

+0

Ne aggiungo uno a questa grande lista: non c'è bisogno di ottenere nuove versioni delle librerie Python (es. Estensioni C) ogni volta che si passa a nuova versione .X. Che grande vittoria sarà. – Brandon

+4

In che modo PyPy migliora la situazione con le estensioni C? In effetti le estensioni C sono uno degli (attuali) maggiori svantaggi di PyPy - non funzionano affatto a meno che non siano portati in modo specifico. – fuzzyman

+2

Con la velocità aggiuntiva di PyPy JIT (in particolare se possono applicarlo efficacemente al codice 'ctypes'), in primo luogo dovrebbero esserci un numero significativamente minore di estensioni C nel mix. – ncoghlan

4

La caratteristica più importante è ovviamente il compilatore JIT. Nei file CPython vengono compilati in bytecode (.pyc) o in bytecode ottimizzato (.pyo) e quindi interpretati. Con PyPy verranno compilati in codice nativo. PyPy comprende anche Stackless Python patch, tra cui è impressionante features (serializzazione tasklet, fili di luce etc.)

+0

Penso che tu intenda codice nativo piuttosto che eseguibile nativo.Codice eseguibile nativo – fuzzyman

+0

;-) – vartec

+2

Hmmm ... e no, PyPy non compila i programmi Python in eseguibili nativi, non è corretto. – fuzzyman

0

Nel caso in cui Python ottiene un vero e proprio JIT Penso che sarà più veloce di qualsiasi altra applicazione.

Il vantaggio è che è molto più semplice implementare nuove funzionalità. Lo si può vedere oggi osservando la biblioteca. Spesso i moduli sono scritti in Python e poi tradotti in C.

0

compatibilità cross-platform

5

Questo è un link per la presentazione di uno degli autori PyPy forniti a PyCon 2009. È molto istruttivo.

+0

Controlla anche il torrent dei colloqui di EuroPython 2012, alcuni dei quali erano su PyPy (e senza stack, che ora fa parte di PyPy) –