Why doesn't Python have these?
Non sono sicuro del motivo per cui pensi che non ci siano implementazioni Python che si interessano alle prestazioni. PyPy , IronPython e Jython sono tutte implementazioni Python di produzione industriale e pronte per la produzione che si interessano alle prestazioni. Pyston è un'implementazione in fase di sviluppo che è stata specificamente creata per le prestazioni. Unladen Swallow e Psyco sono stati anche progetti per migliorare le prestazioni di Python.
Tuttavia, il fatto che gli utenti di CPython superino di gran lunga la base di utenti totale combinata di tutte le altre implementazioni, che Unladen Swallow è stato rifiutato dalla comunità, che la maggior parte di questi progetti sono morti o in difficoltà attirare gli sviluppatori dovrebbe dirti qualcosa su come la comunità di Python apprezza le prestazioni.
Questa risposta è un buon esempio della mentalità tipica della comunità Python: invece di risolvere i problemi di prestazioni , preferirebbero semplicemente scrivere il loro codice non in Python.
I have been looking at PyPy and IronPython, which both claim speed gains. PyPy I don't understand how a Python implementation written in Python, an interpreted language, will be faster than the reference implementation in C.
Prima di tutto: non importa in quale lingua è scritto il compilatore. Dopo tutto, il compilatore viene eseguito solo una volta , quindi anche se era lento, non importa: le prestazioni del compilatore sono irrilevanti, ciò che è rilevante è la performance del output del compilatore.
In secondo luogo, poiché importa solo quanto sia veloce l' output del compilatore, e il compilatore sia scritto in Python, cioè il linguaggio che compila, può effettivamente fare se stesso veloce compilando se stesso.
In terzo luogo, non esiste una "lingua interpretata". Una lingua è un insieme di regole e restrizioni matematiche. È una specifica Un pezzo di carta. Una lingua non è compilata o interpretata. Una lingua è . La compilazione e l'interpretazione sono tratti di una lingua implementazione , più precisamente, un compilatore o interprete (duh!), Non la lingua. Ogni linguaggio può essere implementato da un compilatore. Ogni lingua può essere implementata da un interprete. È possibile generare meccanicamente un compilatore da un interprete e un interprete da un compilatore.
Ma tutto ciò non ha realmente importanza, perché PyPy è in realtà non scritto in Python. È scritto in RPython . RPython è costituito da due parti, il linguaggio di programmazione RPython e il framework RPython.
Il linguaggio di programmazione RPython è non Python. È un linguaggio di programmazione diverso. RPython è un linguaggio di programmazione staticamente tipizzato, grosso modo sullo stesso livello dell'astrazione come Java, con circa le stesse prestazioni di C. RPython è un sottoinsieme sintattico e semantico di Python, il che significa che ogni programma RPython è un valido programma Python e può essere eseguito da un'implementazione Python (anche se in genere diversi ordini di grandezza più lenti, ma questo è ancora utile per il debug perché si ha accesso a tutti gli strumenti di Python e l'interpretazione inizia immediatamente, mentre la compilazione dell'implementazione del linguaggio richiede in genere circa 5-10 minuti ), ma il contrario non è vero.
Il framework RPython è un framework per la scrittura di implementazioni dinamiche del linguaggio ad alte prestazioni nel linguaggio di programmazione RPython. Comprende un garbage collector, uno spazio oggetti, un protocollo meta-oggetto, oggetti predefiniti, tipi, operazioni e così via. Ma il gioiello della corona è la sua capacità di generare automaticamente un compilatore JIT da un interprete: se implementi un linguaggio nel framework RPython, devi solo scrivere un interprete, il framework RPython si prende cura del JIT.
Ci sono molte implementazioni linguistiche sulla piattaforma RPython , non solo su PyPy.
IronPython, same idea but I don't see how the .NET Framework will increase speed.
La maggior parte delle implementazioni della CLI ISO, come le varie varianti .NET di Microsoft o Mono, contengono sofisticati garbage collector, ottimizzatori e compilatori. Lo stesso vale per le implementazioni Jython e Java.
IronPython è un compilatore, compila il codice sorgente Python per gli alberi DLR (DLR è il Dynamic Language Runtime), che viene poi ulteriormente compilato in codice byte CIL, che viene quindi di nuovo ulteriormente compilato in codice macchina nativo.