Dopo Python-cobol ho Incredibilmente scoperto Cython, un linguaggio di programmazione ibrido fra Python e C, in particolare lo scopo è quello di creare programmi Python richiamando all'evenienza funzioni C, quindi che consentono una maggiore efficienza di esecuzione.
Un benchmark di performance fra C, Python, PHP, JavaScript, MATLAB mostra chiaramente che C/C++ ha la massima efficienza, linguaggi interpretati come Python hanno grosse lacune quando si tratta di un notevole sforzo computazionale. Quindi Cython può essere una soluzione interessante per continuare a programmare in Python, sfruttando l'efficienza del C, all'occorrenza.
Installazione di Cython:
pip install cython
Per trovare la soluzione più ottimale, ho smanettato un pochino e suggerisco di seguire questi step:
- creare un file, setup.py, che ci servirà dopo
- creare un file, esempio.pyx, che è il file Cython: qui scriviamo funzioni, con una sintassi "mista" C/Python, quindi di fatto codice Python ma con la possibilità di gestione del tipo di variabili come nel C, ad esempio:
def f(int x):
return x*x
print(f(3))
- nel file setup.py scriviamo questo codice:
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("esempio.pyx")
)
- da terminale scriviamo:
python3 setup.py build_ext --inplace
- vengono generati una serie di file, che lasciamo dove sono
- ora da terminale possiamo scrivere:
import esempio
Viene eseguito il codice Cython, in questo caso la funzione f(3)=3*3 e stampato a video il risultato, 9.
- ovviamente, se si modifica il file Cython, occorre compilare di nuovo, con il comando visto prima!
Conclusione: ho testato al volo Cython e comunque mi sembra interessante. Anche la documentazione è buona. L'idea di migliorare l'efficienza computazionale di Python, mantenendo la sintassi principale di Python, è una valida soluzione.
Magari a breve pubblichiamo un benchmark di performance fra Cython, C e Python, analogo a quanto fatto in precedenza con il confronto fra C, Python, MATLAB - GNU Octave, JavaScript, PHP.
Approfondimenti:
GitHub - Cython
Cython - tutorial
Unire C e Python nel modo migliore (no Cython)
Eseguire codice C in Python tramite CFFI