Cython
Cython | ||
---|---|---|
![]() | ||
![]() | ||
Desarrollador(es) | ||
Robert Bradshaw, Stefan Behnel, et al. https://cython.org | ||
Información general | ||
Paradigma | multiparadigma: orientado a objetos, imperativo, funcional, reflexivo | |
Apareció en | 28 de julio de 2007 | |
Sistema de tipos | fuerte, estático, dinámico | |
Influido por | C, Python | |
Licencia | Licencia Apache, versión 2.0 | |
Cython es un lenguaje de programación para simplificar la escritura de módulos de extensión para Python en C y C++. Siendo estrictos, la sintaxis de Cython es la misma de Python pero con algunos agregados:
- Se pueden llamar funciones en C, o funciones/métodos de C++, directamente desde el código en Cython.
- Es posible usar tipos estáticos en las variables (enteros, flotantes, o cualquier tipo de dato).
Cython compila a código en C o C++ desde Python, y el resultado puede ser usado desde Python como un "Modulo de extensión", o como una aplicación embebida en el intérprete CPython.
Historia
[editar]Cython es un proyecto derivado de Pyrex, pero implementa más funcionalidades y optimizaciones que este.[1]
Los archivos Cython tienen una extensión .pyx. En su forma más básica, el código Cython se ve exactamente como el código Python.[2][3] Sin embargo, mientras que Python estándar se escribe dinámicamente, en Cython, los tipos se pueden proporcionar opcionalmente, lo que permite un rendimiento mejorado, permitiendo que los bucles se conviertan en bucles C siempre que sea posible. Por ejemplo:[4]
def primes(int kmax): # The argument will be converted to int or raise a TypeError.
cdef int n, k, i # These variables are declared with C types.
cdef int p[1000] # Another C type
result = [] # A Python type
if kmax > 1000:
kmax = 1000
k = 0
n = 2
while k < kmax:
i = 0
while i < k and n % p[i] != 0:
i = i + 1
if i == k:
p[k] = n
k = k + 1
result.append(n)
n = n + 1
return result
Ventajas
[editar]La ventaja esencial de este enfoque, es que al entremezclar perfectamente código Python/C (es decir, C usando <python.h>) es que el código Python existente se puede ajustar a casi la velocidad de C con solo añadir unos pocos tipos estáticos a las declaraciones y haciendo algunas adaptaciones en los bucles críticos -sin necesidad de una interfaz complicada o muy invasiva del código. La velocidad de codificación y la legibilidad del código sigue siendo bastante similar a la que se tiene usando Python.
Debido a reducción del consumo general en las estructuras de control (especialmente los bucles), las optimizaciones optimistas y la (limitada) inferencia de tipos, el código Python compilado con Cython normalmente se ejecuta más rápido que en el intérprete CPython 2.6.x, aunque las mejoras absolutas dependen en gran medida del código. Con las declaraciones de tipos estáticos, la aceleración típica en cálculos numéricos/matriciales es de 100x-1000x[5] En comparación a la típica optimización con Psyco (Python JIT compiler) qué es entre 4x-100x.[6]
Compatibilidad
[editar]Cython está escrito en Python, así que trabaja en Windows, Linux, y MacOS X.
Usos
[editar]- SageMath, un sistema de álgebra computacional está parcialmente escrito en Cython.
Referencias
[editar]- ↑ Differences between Cython and Pyrex Archivado el 25 de julio de 2011 en Wayback Machine.
- ↑ «Differences between Cython and Pyrex».
- ↑ Ewing, Greg (21 de marzo de 2011). «Re: VM and Language summit info for those not at Pycon (and those that are!)» (Message to the electronic mailing-list
python-dev
). Consultado el 5 de mayo de 2011. - ↑ Zed Shaw (2017). Learn Python the hard way. Addison-Wesley Professional. ISBN 978-0134692883. Archivado desde el original el 6 de septiembre de 2021. Consultado el 22 de octubre de 2021.
- ↑ «gmane.comp.python.cython.devel - Passing a pointer from Python». Archivado desde el original el 14 de febrero de 2017. Consultado el 3 de mayo de 2011.
- ↑ Psyco - Introduction