2011-03-21 9 views
7

¿El código producido por Cython es tan correcto como el código de Python desde el que se produjo?Corrección de Cython

Puede ayudar a otros lectores abordar el uso de declaraciones de tipo estático Cython y otras características de Cython (si las hay), aunque solo estoy interesado en crear archivos Cython cambiando el nombre de los módulos de Python a * .pyx.

Solo me importa el subconjunto de Python cubierto por Cython.

Respuesta

10

En general, sí. Por supuesto, hay bugs (muchos giran alrededor de la expansión del subconjunto soportado de Python, los errores que realmente hacen que el código C generado sea incorrecto son relativamente raros), y hay algunos necesarios caveats (aunque parece que solo un elemento en esa lista corta se desvía de Semántica de Python).

Cuando agrega tipos estáticos en modo Python puro, hay circunstancias en las que hace una diferencia si se compila como Cython o si se ejecuta como código de Python. Los enteros sin signo vienen a la mente (ejemplo: como se ha mencionado en una enlace de arriba, -n se ajustará alrededor de si n es sin firmar y range(-n, n) es por lo tanto vacío), así como desbordamiento de entero (Python promueve int s (C long s) a long s (abritary -los enteros de precisión)).

+0

Gracias por su respuesta. Sería muy tranquilizador escuchar a un experto; ¿trabajas en el proyecto Cython? Por cierto, disfruto el proyecto Cython; me proporciona funcionalidad que ninguna otra herramienta que he encontrado lo hace. – Brian

+1

@Brian: No, no soy lo suficientemente impresionante como para involucrarme en Cython;) Solo soy otro usuario y estudiante de la documentación. Si desea preguntarle a los desarrolladores, al menos algunos de ellos participan en la lista de correo ['cython-users'] (http://groups.google.com/group/cython-users). – delnan

+0

Soy un desarrollador de Cython, y puedo decir que cualquier regresión de Python se consideraría un error grave, aunque las advertencias relacionadas (en particular, el uso explícito de enteros tipo C) se deben tener en cuenta. – robertwb