¿Convertir el programa Python a código C/C++? [cerrado]
¿Es posible convertir un programa Python a C/C++?
Necesito implementar un par de algoritmos y no estoy seguro de si la brecha de rendimiento es lo suficientemente grande como para justificar todo el dolor que pasaría al hacerlo en C/C++ (en lo cual no soy bueno). Pensé en escribir un algoritmo simple y compararlo con una solución convertida de este tipo. Si eso por sí solo es significativamente más rápido que la versión de Python, entonces no tendré otra opción que hacerlo en C/C++.
Si la variante C necesita x horas menos, entonces invertiría ese tiempo en dejar que los algoritmos se ejecuten por más tiempo o nuevamente.
"invertir" no es la palabra correcta aquí.
Cree una implementación funcional en Python. Terminarás esto mucho antes de terminar una versión C.
Mida el rendimiento con el generador de perfiles de Python. Solucione cualquier problema que encuentre. Cambie las estructuras de datos y los algoritmos según sea necesario para hacerlo realmente correctamente. Terminarás esto mucho antes de terminar la primera versión en C.
Si todavía es demasiado lento, traduzca manualmente el Python bien diseñado y construido cuidadosamente a C.
Debido a la forma en que funciona en retrospectiva, hacer la segunda versión de Python existente (con pruebas unitarias existentes y con datos de perfiles existentes) seguirá siendo más rápido que intentar hacer el código C desde cero.
Esta cita es importante.
La regla de Thompson para los fabricantes de telescopios por primera vez
Es más rápido hacer un espejo de cuatro pulgadas y luego uno de seis pulgadas que hacer un espejo de seis pulgadas.Instituto Bill McKeenan
Wang
Sí. Mira a Cython . Hace precisamente eso: convierte Python a C para acelerar.
Shed Skin es "un compilador (restringido) de Python a C++".
De los documentos :
Shed Skin es un compilador experimental que puede traducir programas Python (2.4-2.6) puros, pero tipificados implícitamente de forma estática , a C++ optimizado. Puede generar programas independientes o módulos de extensión que pueden importarse y usarse en programas Python más grandes.
Además de la restricción de escritura, los programas no pueden usar libremente la biblioteca estándar de Python (aunque actualmente se admiten alrededor de 25 módulos comunes, como
random
y ).re
Además, no se admiten todas las funciones de Python, como funciones anidadas y números variables de argumentos.
Para un conjunto de 75 programas no triviales (con más de 25.000 líneas en total (sloccount)), las mediciones muestran una aceleración típica de 2 a 200 veces con respecto a CPython.