Julia es un lenguaje de programación relativamente nuevo, apareció en el año 2012, que últimamente está atrayendo a muchos usuarios. Siendo la promesa de un alto rendimiento una de sus mayores bazas. Prometiendo rendimientos similares a los de código escrito en C o FORTRAN con la facilidad que ofrecen lenguajes de script como Python, R o Matlab. A continuación, se va a explicar porque los programas escritos en Julia se ejecuten más rápido que los equivalentes, comparándose con un ejemplo. Viendo así por qué Julia puede ser interesante.
Tabla de contenidos
Julia
Julia es un lenguaje de programación dinámico de propósito general de alto nivel diseñado para tareas de análisis y cálculo numérico. Ofreciendo en un mismo lenguaje del dinamismo que se obtiene en Python, R o Matlab, y la velocidad de ejecución de código escrito en C. En el lenguaje programación Julia el código se compila sobre la marcha, por lo que este puede aprovechar mejor las capacidades del hardware sobre el que se ejecuta. No interpretando el código como sucede en otros lenguajes de programación actuales.
Paquetes
Al igual que sucede en R o Python, los paquetes son una característica clave de Julia, integrando un gestor de paquetes en el que ya se pueden encontrar más de 2800. Aunque no llega a la cantidad de paquetes disponibles en el CRAN para R o en PyPI para Python, es necesario notar que en enero de 2018 había cerca de 1600.
Ejecución de código en paralelo
Una de las características más interesantes de Julia para computación de alto rendimiento es su capacidad paralelizar el código. En Julia para ejecutar un script en solamente se tiene que indicar el número de núcleos en la línea de comandos a la hora de llamar a este. Además, es posible enviar tareas a diferentes hilos directamente desde el código. Finalmente, los bucles de Julia se puede ejecutar el paralelo directamente no es necesario indicarlo como en otros lenguajes.
Comparación del rendimiento de Julia con R, Python, Matlab y Javascript
Una forma para comparar el rendimiento de Julia con otros lenguajes es resolver el mismo problema. Por ejemplo, calcular la sucesión de Fibonacci. La misma función que se ha utilizado para comparar el rendimiento código escrito en R con C++ utilizando el paquete Rcpp.
En primer lugar, se va a presentar las funciones que se utilizarán en Julia R, Python, Matlab y Javascript para calcular la sucesión de Fibonacci. Posteriormente se van a comparar los tiempos de ejecución en los diferentes entornos.
Julia
Para la prueba en Julia se utiliza el siguiente código en Julia 1.1.0.
function fibonacci(n) if n < 2 return n else return fibonacci(n-1) + fibonacci(n-2) end end
R
Para la prueba en R se utiliza el siguiente código en R 3.6.1.
fibonacci <- function(n) { if (n < 2) { return(n) } else { return(fibonacci (n-1) + fibonacci (n-2)) } }
Python
Para la prueba en Python se utiliza el siguiente código en Python 3.7.2.
def fibonacci(n): if n < 2: return n else: return fibonacci(n-1) + fibonacci(n-2)
Matlab
Para la prueba en Matlab se utiliza el siguiente código en la Matlab 2019a.
function result = fibonacci(n) if (n <= 1) result = 1; else result = fibonacci(n-1) + fibonacci (n-2); end end
Javascript
Para la prueba en Javascript se utiliza el siguiente código en la Node 11.6.0.
function fibonacci(n) { if (n < 2) { return(n); } else { return(fibonacci (n-1) + fibonacci (n-2)); } };
Tiempos de ejecución
En los cinco pruebas se ha ejecutado fibonacci(25)
obtenidos los siguientes tiempos de ejecución en cada uno de los casos. Además, también se incluye cuántas veces ha sido más lento cada uno de los lenguajes respecto a Julia.
Tiempo en segundos | Veces más lento que Julia | |
Julia | 0,0358 | 1 |
R | 8,711 | 243,0 |
Python | 3,179 | 88,7 |
Matlab | 0,946 | 26,4 |
Javascript | 0,132 | 3,7 |
En este ejemplo se puede ver que Julia, para este problema particular, es más de 240 veces más rápido que R, 80 que Python, 25 que Matlab y 3,7 que Javascript. Comprobando la velocidad que se puede conseguir con Julia. Se puede recordar que el año pasado se comprobó la mejora de ejecutar código C++ con Rcpp con esta misma función. En aquella ocasión la mejora obtenida con C++ era 176 veces más rápida que la versión de R. En el ejemplo de hoy Julia ha aumentado esa diferencia.
Una forma más clara de ver los resultados es haciendo una gráfica con los tiempos de ejecución.
Conclusiones
Hoy hemos visto algunos de los motivos por los que Julia debería se más rápido que otros lenguajes que utilizados habitualmente en ciencia de datos. Comprobado mediante un ejemplo que esto es cierto. Así, en el caso de que estemos utilizando programas que sean lentos y necesitan tiempo para su ejecución, una solución puede ser traducir esos a Julia. Un motivo por lo que puede ser interesante aprender este lenguaje.
Imágenes: Pixabay (Jiří Rotrekl)
Jean dice
Buenas Tardes, aun no comprendo como javascript pueda ser más rápido que python en tus pruebas.
Daniel Rodríguez dice
En la mayoría de los casos será más rápido el mismo código escrito en JavaScript que Python. Es algo que se puede probar fácilmente con el código de la entrada o buscar más comparativas en internet.
Pero aún así este no debería ser el único motivo por el que usar un leguaje de programación u otro. Hay más factores como las librerías que existen y la experiencia que tengamos con el.