Python è incredibilmente popolare perché è facile da imparare, versatile e ha migliaia di utili librerie per la scienza dei dati. Ma una cosa che non è è veloce.
Questo sta per cambiare in Python 3.11, attualmente nella prima fase beta della sua anteprima (versione 3.11.0b1) prima della sua versione stabile entro la fine dell’anno. Lo sviluppatore di Core Python (CPython) Mark Shannon ha condiviso i dettagli sul progetto per rendere Python più veloce alla conferenza PyCon 2022 di questa settimana , dove gli sviluppatori hanno anche mostrato i progressi sull’obiettivo di eseguire il codice Python nel browser.
L’anno scorso, Microsoft ha finanziato un progetto per la Python Software Foundation (PSF), guidata dal creatore di Python Guido van Rossum e Shannon, per rendere Python due volte più veloce dell’attuale serie stabile 3.10. La visione è di spingere Python verso l’esecuzione di C.
Microsoft ha assunto van Rossum nel 2020 e gli ha dato mano libera per scegliere qualsiasi progetto. Alla conferenza PyCon 2021 dell’anno scorso, ha detto che “ha scelto di tornare alle mie radici” e che avrebbe lavorato sulla famosa mancanza di prestazioni di Python.
Le prestazioni, forse, non sono state una priorità assoluta per Python poiché l’adozione è stata alimentata dall’apprendimento automatico e dalla scienza dei dati grazie a Tensor Flow, Numpy, Pandas e molte altre piattaforme, come Boto3 SDK di AWS per Python . Queste piattaforme vengono scaricate decine di milioni di volte al mese e utilizzate in ambienti che spesso non sono vincolati dall’hardware.
Il progetto Faster CPython ha fornito alcuni aggiornamenti sulle prestazioni di CPython 3.11 nell’ultimo anno. In vista di PyCon 2022, il progetto ha pubblicato più risultati confrontando l’anteprima della beta 3.11 con la 3.10 su dozzine di metriche delle prestazioni, dimostrando che 3.11 era complessivamente 1,25 volte più veloce di 3.10.
Shannon è realistico sulla capacità del progetto di migliorare le prestazioni di Python, ma ritiene che i miglioramenti possano estendere l’uso fattibile di Python a più macchine virtuali.
“Python è ampiamente riconosciuto come lento. Sebbene Python non raggiungerà mai le prestazioni di linguaggi di basso livello come C, Fortran o persino Java, vorremmo che fosse competitivo con implementazioni veloci di linguaggi di scripting, come V8 per Javascript o luajit per lua”, ha scritto l’anno scorso in Python Enhancement Proposal (PEP) 659.
“In particolare, vogliamo raggiungere questi obiettivi di prestazioni con CPython a beneficio di tutti gli utenti di Python, compresi quelli che non sono in grado di utilizzare PyPy o altre macchine virtuali alternative”.
L’approccio chiave descritto in PEP 659 è un “interprete specializzato e adattivo che specializza il codice in modo aggressivo, ma su una regione molto piccola, ed è in grado di adattarsi a una specializzazione errata in modo rapido ea basso costo”.
Come notato, le ottimizzazioni per le macchine virtuali sono “costose”, spesso richiedono un lungo tempo di “riscaldamento”. Per evitare questo dispendio di tempo, la VM dovrebbe “speculare sul fatto che la specializzazione sia giustificata anche dopo alcune esecuzioni di una funzione”, quindi l’interprete deve ottimizzare e de-ottimizzare continuamente e in modo molto economico.
Ciò dovrebbe comportare un interprete più veloce per CPython che tiene traccia dei singoli bytecode durante l’esecuzione di un programma. Il lavoro sul nuovo interprete è quasi completo ma richiede ancora il completamento delle specializzazioni dinamiche per i loop e le operazioni binarie, secondo PSF .
Inoltre, il consumo di memoria in 3.11 non è cambiato da 3.10.
Sulla questione di un compilatore just-in-time (JIT) per le prestazioni di Python, Shannon ha suggerito che non era una priorità e probabilmente non sarebbe arrivato fino a Python 3.13, secondo la copertura dell’evento da parte della Python Software Foundation.
Anaconda, il creatore della distribuzione Anaconda Python per la scienza dei dati, sostiene il progetto Pyston , un’implementazione di Python che promette miglioramenti della velocità rispetto a Python.
Uno dei più vecchi sforzi di Anaconda per velocizzare Python è stato il progetto Numba, un compilatore JIT basato su LLVM per CPython, che accelera le funzioni numeriche di Python in esecuzione sulla CPU o sulla GPU, ma non può ottimizzare interi programmi e non affronta un uso più ampio di Python casi. Un altro è PyPy , un’implementazione di CPython con un compilatore JIT per prestazioni più veloci.
Secondo il piano di implementazione Faster Python , CPython 3.12 potrebbe ottenere un “semplice compilatore JIT per piccole regioni” che compila piccole regioni di codice specializzato, mentre 3.13 migliorerebbe il compilatore per estendere le regioni per la compilazione.