Perché Python non li ha?
Non sono sicuro del motivo per cui pensi che non ci siano implementazioni Python che si preoccupano delle prestazioni. PyPy , IronPython e Jython sono tutte implementazioni Python di livello industriale, pronte per la produzione e attente alle prestazioni. Pyston è un'implementazione in fase di sviluppo creata appositamente per le prestazioni. Unladen Swallow e Psyco erano anche progetti per migliorare le prestazioni di Python.
Tuttavia, il fatto che gli utenti di CPython superino di gran lunga la base totale di utenti combinati di tutte le altre implementazioni, che Unladen Swallow sia stata respinta dalla comunità, che la maggior parte di questi progetti siano morti o che lottano per attirare gli sviluppatori dovrebbe dirti qualcosa su come Python la comunità valorizza 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.
Ho osservato PyPy e IronPython, che entrambi rivendicano guadagni di velocità. PyPy Non capisco come un'implementazione di Python scritta in Python, un linguaggio interpretato, sarà più veloce dell'implementazione di riferimento 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 fosse lento, non importa: le prestazioni del compilatore sono irrilevanti, ciò che è rilevante è la prestazione dell'output del compilatore.
In secondo luogo, dal momento importa solo quanto velocemente l'uscita del compilatore è, e il compilatore è scritto in Python, cioè il linguaggio che si compila, si può effettivamente fare per sé veloce compilando sé.
In terzo luogo, non esiste un "linguaggio interpretato". Una lingua è un insieme di regole e restrizioni matematiche. È una specifica. Un pezzo di carta. Una lingua non è compilata o interpretata. Una lingua è solo . Compilazione e interpretazione sono tratti di un'implementazione del linguaggio , più precisamente un compilatore o interprete (duh!), Non il linguaggio. Ogni lingua può essere implementata 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 davvero importanza, perché PyPy in realtà non è scritto in Python. E 'scritto in RPython . RPython è composto 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 tipicamente statico, all'incirca allo stesso livello di astrazione di Java, con circa le stesse prestazioni di C. RPython è un sottoinsieme sintattico e semantico di Python, il che significa che ogni programma RPython è un programma Python valido e può essere gestito da un'implementazione di Python (anche se in genere più ordini di grandezza più lenti, ma questo è ancora utile per il debug perché hai accesso a tutti gli strumenti di Python e l'interpretazione inizia subito, mentre la compilazione dell'implementazione del linguaggio richiede in genere circa 5-10 minuti ), ma non è vero il contrario.
Il framework RPython è un framework per la scrittura di implementazioni di linguaggio dinamico ad alte prestazioni nel linguaggio di programmazione RPython. Include un garbage collector, spazio oggetti, protocollo meta-oggetto, oggetti predefiniti, tipi e operazioni e così via. Ma il gioiello della corona è la sua capacità di generare automaticamente un compilatore JIT da un interprete: se implementate un linguaggio nel framework RPython, dovete solo scrivere un interprete, il framework RPython si prende cura del JIT.
Ci sono molte implementazioni linguistiche sulla piattaforma RPython , non solo PyPy.
IronPython, stessa idea ma non vedo come .NET Framework aumenterà la velocità.
La maggior parte delle implementazioni della CLI ISO, come le varie varianti .NET di Microsoft o Mono, contengono sofisticati raccoglitori di rifiuti, ottimizzatori e compilatori. Lo stesso vale per le implementazioni Jython e Java.
IronPython è un compilatore, compila il codice sorgente Python negli alberi DLR (DLR è il Dynamic Language Runtime), che vengono quindi ulteriormente compilati nel codice byte CIL, che viene quindi di nuovo tipicamente ulteriormente compilato nel codice macchina nativo.