I read that some constructs of Python are more efficient because they are compiled in C.
Non è vero.
Prima di tutto, non c'è nulla nelle specifiche del linguaggio Python che richiede che certe funzioni debbano essere implementate in una certa lingua. Un implementatore Python può scegliere di implementare qualsiasi funzione e costruzione del linguaggio in ogni caso. Ad esempio, in Jython, quelle funzioni sono implementate in Java, non in C. In IronPython, sono implementate in C #. In PyPy, potrebbero essere implementati in RPython o solo in Python. In Pynie, sono probabilmente implementati in Python.
In secondo luogo, non c'è nulla nelle specifiche del linguaggio C che dice che deve essere compilato. Ci sono interpreti per C.
In terzo luogo, solo perché è in C non significa che sia veloce. Ci sono compilatori C là fuori che producono codice veramente terribile, e ci sono implementazioni Python piuttosto veloci.
E in quarto luogo, anche se la funzione implementata in C è incredibilmente veloce, ciò non si traduce necessariamente in una maggiore velocità di esecuzione del programma generale. Le ottimizzazioni in genere non funzionano tra le lingue. Ad esempio, l'ottimizzatore non può inline la chiamata a map
nel tuo programma, perché il tuo programma è scritto in Python ma map
è scritto in C. Ma l'inlining è praticamente il fondamento di tutte le ottimizzazioni, perché inlining (e ciclo di srotolamento) danno bei percorsi dritti e lunghi di codice senza rami o chiamate, che è ciò che gli ottimizzatori amano .
It's generally interpreted,
In realtà, tutte le implementazioni Python attualmente esistenti compilano sempre codice Python, non lo interpretano mai.
Why not just compile the whole thing?
Questa è una buona domanda! Scrivere tutto nella stessa lingua ha molti vantaggi, alcuni dei quali ho delineato sopra. (Un altro è che è più facile trovare collaboratori che conoscono una lingua rispetto a due.)
Se tutto è scritto nella stessa lingua, i miglioramenti delle prestazioni in quella lingua vengono moltiplicati nell'intero sistema. Se tutto è scritto in C, rendere il Python 10 volte più veloce non accelera molto il tuo programma, perché la maggior parte del codice non è Python. Certo, il codice che hai scritto è in esecuzione 10 volte più veloce, ma questo codice consiste principalmente di chiamate a funzioni C che hanno la stessa velocità di prima.
Ma se tutto è scritto in Python, quindi rendere Python più veloce avrà un effetto a catena: i tipi primitivi diventano più veloci, le strutture create su quei tipi primitivi diventano più veloci, gli algoritmi che usano quelle strutture si velocizzano, i moduli che usano quegli algoritmi diventano più veloci e così via.