Citón

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 27 de noviembre de 2021; las comprobaciones requieren 7 ediciones .
Citón
clase de idioma software de código abierto , implementación de lenguaje de programación [d] , Transpiler , lenguaje de programación , software libre y biblioteca de Python [d]
Apareció en 28 de julio de 2007
Autor Robert Bradshaw, Stefan Behnel y más
Liberar 0.29.32 ( 29 de julio de 2022 ) [1]
Versión de prueba 3.0.0a11 ( 31 de julio de 2022 ) [2]
sido influenciado Pirex
Licencia Licencia Apache
Sitio web cython.org
sistema operativo Sistema operativo similar a Linux y Unix

Cython  es un lenguaje de programación que facilita la escritura de módulos de código C / C++ para Python . Además de la sintaxis estándar de Python, se admite lo siguiente:

El código de Cython se convierte en código C/C++ para la compilación y luego se puede usar como una extensión de Python estándar o como una aplicación independiente con la biblioteca de tiempo de ejecución de Cython incorporada.

Historia

Cython es el sucesor del lenguaje de programación Pyrex , pero tiene más funciones y optimizaciones. [3]

Beneficios

Cython tiene una sintaxis muy cercana a Python.

Un beneficio particular de este enfoque "perfecto" para la mezcla Python/C es que el código Python existente puede configurarse para ejecutarse casi tan rápido como agregar algunas declaraciones de tipos estáticos y algunas adaptaciones en bucles críticos, sin necesidad de un código de interfaz complejo. . La velocidad de codificación y la legibilidad del código siguen siendo comparables a las de Python.

Debido a la sobrecarga reducida en las estructuras de control (especialmente en los bucles), las optimizaciones optimistas y la inferencia de tipos (limitada), el código de Python compilado con Cython generalmente se ejecuta más rápido que en CPython 2.6.x, aunque la mejora absoluta depende en gran medida del código. Con declaraciones de tipo, las aceleraciones típicas para cálculos/matrices numéricas son alrededor de 100-1000 veces. [4] En comparación, un aumento de velocidad típico con Psyco ( un compilador JIT para Python) es de aproximadamente 4 a 100 veces. [5]

Cython se ha optimizado para una sobrecarga de llamadas de subrutina baja, por lo que llamar al código C/C++ externo desde Python a través del shell de Cython es generalmente más rápido que la mayoría de las otras soluciones. [6] [7]

Ejemplo

El siguiente ejemplo calcula la función de Ackermann :

# Archivo ackermann.pyx cdef ackermann ( int m , int n ): if m == 0 : return n + 1 elif n == 0 : return ackermann ( m - 1 , 1 ) else : return ackermann ( m - 1 , ackermann ( m , n - 1 )) imprimir ( "Ackermann:" ) imprimir ( ackermann ( 0 , 3 )) imprimir ( ackermann ( 1 , 4 ))

Para obtener un archivo ejecutable, debe traducirse a C (aquí y más abajo: comandos de shell de un sistema similar a UNIX ) [8] :

cython --embed ackermann.pyx -o ackermann.c

Después de eso, puede compilar el archivo intermedio resultante [8] :

gcc -g -O2 -o ackermann ackermann.c ` python-config --incluye --ldflags `

Alternativas

Para enlazar bibliotecas C se puede utilizar SWIG , que soporta varios lenguajes de programación a la vez, pero por su generalidad, Cython pierde algo en facilidad de uso (la cantidad de código adicional necesario). Otras contrapartes notables incluyen Parakeet (usa la compilación LLVM y JIT de código de Python especialmente marcado) [9] y Nuitka (un traductor de Python a C++ que, como PyPy , intenta escribir un programa de Python en tiempo de compilación) [10] [8] .

Véase también

Notas

  1. 0.29.32 . Consultado el 21 de agosto de 2022. Archivado desde el original el 18 de agosto de 2022.
  2. 3.0.0a11 . Consultado el 21 de agosto de 2022. Archivado desde el original el 21 de agosto de 2022.
  3. Diferencias con Pyrex Archivado el 25 de julio de 2011 .
  4. gmane.comp.python.cython.devel - Pasar un puntero desde Python (enlace descendente) . Consultado el 30 de noviembre de 2010. Archivado desde el original el 14 de febrero de 2017. 
  5. Psico-Introducción . Consultado el 30 de noviembre de 2010. Archivado desde el original el 29 de noviembre de 2019.
  6. Pruebas comparativas de contenedores para varios generadores de contenedores de Python (excepto Cython) (enlace no disponible) . Consultado el 30 de noviembre de 2010. Archivado desde el original el 4 de abril de 2015. 
  7. Benchmarks de contenedores para Cython, Boost.Python y PyBindGen . Consultado el 30 de noviembre de 2010. Archivado desde el original el 3 de marzo de 2016.
  8. 1 2 3 Herron, 2014 .
  9. Parakeet: un compilador de tiempo de ejecución para Python numérico (enlace descendente) . Fecha de acceso: 27 de noviembre de 2014. Archivado desde el original el 12 de noviembre de 2014. 
  10. Casa Nuitka . Consultado el 27 de noviembre de 2014. Archivado desde el original el 30 de mayo de 2020.

Enlaces

Fuentes

  • Stefan Behnel, Robert Bradshaw, Craig Citro, Lisandro Dalcin, Dag Sverre Seljebotn, Kurt Smith. Cython: lo mejor de ambos mundos // Computación en ciencia e ingeniería. - 2011. - Nº 13.2 . - Pág. 31-39. -doi : 10.1109/ MCSE.2010.118 .
  • Felipe Herrón. Cython: Python a código nativo // Formato Linux. - 2014. - Nº 12 / LXF191 . - Pág. 84-87. — ISSN 1470-4234 .
  • Felipe Herrón. Aprendiendo Programación Cython. — Paquete, septiembre de 2013. — 110p. — ISBN 9781783280797 .