Ma ci sono limiti tecnici o funzionalità del linguaggio che impediscono al mio script Python di essere veloce come un programma C ++ equivalente?
No. È solo una questione di soldi e risorse impiegate per far funzionare il C ++ velocemente contro denaro e risorse investite per far funzionare Python velocemente.
Ad esempio, quando uscì il Self VM, non era solo il linguaggio OO dinamico più veloce, era anche il periodo linguistico OO più veloce. Pur essendo un linguaggio incredibilmente dinamico (molto più di Python, Ruby, PHP o JavaScript, ad esempio), è stato più veloce della maggior parte delle implementazioni C ++ disponibili.
Ma poi Sun ha annullato il progetto Self (un linguaggio OO maturo per scopi generali per lo sviluppo di sistemi di grandi dimensioni) per concentrarsi su un piccolo linguaggio di scripting per menu animati in set top box TV (potresti averne sentito parlare, si chiama Java), non c'era più finanziamenti. Allo stesso tempo, Intel, IBM, Microsoft, Sun, Metrowerks, HP et al. speso ingenti somme di denaro e risorse per velocizzare il C ++. I produttori di CPU hanno aggiunto funzionalità ai loro chip per rendere veloce il C ++. I sistemi operativi sono stati scritti o modificati per rendere veloce il C ++. Quindi, C ++ è veloce.
Non ho una grande familiarità con Python, sono più una persona Ruby, quindi darò un esempio da Ruby: la Hash
classe (equivalente in funzione e importanza dict
in Python) nell'implementazione di Rubinius Ruby è scritta in Ruby puro al 100%; tuttavia compete in modo favorevole e talvolta supera anche la Hash
classe in YARV che è scritta in C. ottimizzata a mano. E rispetto ad alcuni dei sistemi commerciali Lisp o Smalltalk (o la suddetta Self VM), il compilatore di Rubinius non è nemmeno così intelligente .
Non c'è nulla di inerente in Python che lo rallenta. Ci sono funzionalità nei processori e nei sistemi operativi odierni che danneggiano Python (ad esempio, la memoria virtuale è nota per essere terribile per le prestazioni della garbage collection). Ci sono funzionalità che aiutano C ++ ma non aiutano Python (le moderne CPU cercano di evitare i problemi di cache, perché sono così costosi. Sfortunatamente, evitare i problemi di cache è difficile quando si hanno OO e polimorfismo. Piuttosto, si dovrebbe ridurre il costo della cache manca. La CPU Azul Vega, progettata per Java, lo fa.)
Se si spendono tanti soldi, ricerca e risorse per rendere Python veloce, come è stato fatto per C ++, e si spendono tanti soldi, ricerca e risorse per creare sistemi operativi che fanno funzionare i programmi Python velocemente come è stato fatto per C ++ e si spende come molti soldi, ricerche e risorse per realizzare CPU che fanno funzionare velocemente i programmi Python come è stato fatto per C ++, quindi non ho dubbi che Python possa raggiungere prestazioni paragonabili a C ++.
Abbiamo visto con ECMAScript cosa può succedere se solo un giocatore prende sul serio le prestazioni. Nel giro di un anno, abbiamo avuto sostanzialmente un aumento delle prestazioni di 10 volte su tutta la linea per tutti i principali fornitori.