Il compilatore Nuitka Python-to-C prepara grandi guadagni in termini di prestazioni

Nuitka, un compilatore che trasforma Python in C per migliorare le prestazioni e un runtime più portatile, ha raggiunto la sua versione 0.6, una pietra miliare che getta le basi per futuri miglioramenti delle prestazioni. Come ha affermato lo sviluppatore di Nuitka Kay Hayen, "È probabile che in ogni prossima versione siano presenti miglioramenti delle prestazioni".

Nuitka 0.6 applica le ottimizzazioni ai booltipi di Python ( true/false), in modo che il codice che li utilizza possa essere ridotto al codice C più efficiente possibile. Le boolottimizzazioni vengono come preludio a ottimizzazioni simili per altri tipi di variabili.

Nuitka, come Cython, compila un programma Python in C e collega l'eseguibile risultante al runtime Python per la massima compatibilità. Le versioni di Python 2.6, 2.7 e da 3.3 a 3.7 sono tutte supportate, comprese le costruzioni come async.

I programmi Python compilati con Nuitka possono beneficiare di grandi aumenti delle prestazioni. Hayen afferma che una versione compilata da Nuitka del benchmark Pystone funziona circa il 312% più velocemente di un'implementazione CPython convenzionale.

Ma Hayen avverte che i miglioramenti più significativi delle prestazioni attendono l'arrivo dell'inferenza di tipo in Nuitka, consentendo la traduzione completa di alcuni tipi di oggetti Python in versioni C native.

Il dinamismo di Python rende intrinsecamente difficili molti tipi di ottimizzazioni. Molte ottimizzazioni Cython richiedono una grande quantità di indicazioni e una sintassi di annotazione specializzata per i migliori risultati. Il progetto Nuitka mira a fornire lo stesso tipo di ottimizzazioni senza richiedere allo sviluppatore di annotare il codice.

Un altro acceleratore Python comunemente usato, PyPy, funziona compilando just-in-time il codice Python da assemblare. Ma PyPy funziona meglio per l'ottimizzazione sul posto; non è adatto per la compilazione di un'app Python distribuita in modo autonomo. Nuitka genera eseguibili autonomi. Uno dei suoi potenziali casi d'uso è impacchettare un'app Python per la distribuzione di terze parti.

Altri miglioramenti in Nuitka 0.6 includono il supporto su Windows per i compilatori Clang, Microsoft Visual C ++ e Cygwin, la memorizzazione nella cache dei file oggetto per una ricompilazione più rapida (di nuovo, su Windows) e la formattazione automatica del codice C generato  clang-formatper la leggibilità.