Ir al contenido
Atrás

Julia es una moda

Editar publicación

Table of contents

Open Table of contents

El problema de Julia

Julia, cómo bien dije antes, se presenta cómo un lenguaje de propósito general y te diré porque no lo es. El compilador JIT de Julia, lamentablemente tiene un tiempo de compilación muy muy lento para poder ser un lenguaje de scripting o de uso para software de una sola ejecución, quiero decir que esta ejecución tarda demasiado para ser comparable incluso a la velocidad de python para realizar una sola tarea.

He realizado un pequeño ejemplo para mostrar este problema

Primero he escrito este script usando la función antes definida en julia, este script simple solo hace algo aleatorio pero que muestra el problema que tiene julia al tener que compilar la función cómo paso previo, y no solo para una dimensión de matriz sino para matrices de diversas dimensiones.

# Script calc.jl
N = 2130
for i = 1:N
    r = randi(10)
    c = randi(10)
    D = rand(r,c) * rand(c,r)
    print(D)
end

Cuando ejecuto este script de una sola vez, se toma 3 segundos en terminar.

$ time julia calc.jl

total time: 3.06 seg

Ahora escribo la misma función en python en un script nuevo:

import numpy as np

for i in range(2130):
    r = np.random.randint(10)
    c = np.random.randint(10)
    D = np.random.rand(r,c) @ np.random.rand(c,r)
    print(D)

En esta ejecución, el script ha tardado 0.7 segundos, menos de 4 veces lo que tardó Julia.

$ time python3 calc.py

total time: 0.73 seg

Esto deja claro que Julia NO es un lenguaje de propósito general.

¿Entonces julia sirve para algo?

Julia, cómo bien he dicho, no es de propósito general pero si es de proposito variado pero específico. Julia es una muy buena opción para elaborar software que se tiene que ejecutar multiples veces usando las mismas utilidades, ya sea las mismas funciones o rutinas. Cuando se trata de este tipo de usos, el lenguaje está cerca de la eficiencia de C.

Yo personalmente creo que Julia es una moda pasajera por motivos de motivación económica tal vez, entre los patrocinadores está ASML o Nvidia, debido a esto se ha construido toda una estructura de fomento del uso de Julia con conferencias cómo el JuliaCon, ser parte del GSoC y tener JuliaHub que es un servidor dedicado a paquetes de Julia no gratuitos y gratuidos.

También me parece importante destacar que existen alternativas a Julia pero no tan conocidas y que por ello no tienen tantas librerias y soporte pero que son igual de rápidas en el ámbito de Julia y en otros ámbitos. Mi favorito es LuaJIT, es la versión JIT de Lua y va cómo un tiro, incluso más rápido que julia, y no solo en ejecuciones posteriores a la primera sino que en la primera ejecución también es muy rápido; Lua es un lenguaje más sencillo sintácticamente y parsearlo conlleva mucho menos cómputo que Julia se vea cómo se vea.

Sintaxis de Julia

Julia tiene una sintaxis muy completa y que facilita mucho la programación. Es un lenguaje tipado, no fuertemente tipado pero si es tipado y a mi parecer, que los lenguajes sean o no tipados muesta lo maduro que es dicho lenguaje. Muchos lenguajes quieren no ser tipados para dar una «facilidad» al desarrollador hasta que se quiere hacer algo serio con el lenguaje en sí, entonces aparecen problemas que conllevan a hacer el lenguaje tipado, no hay más que ver lo que pasó con Javascript para que surgiese Typescript.

Julia no solo ofrece una sintaxis sino que también tiene características muy interesantes, expongo a continuación las que más me gustan:

Las modas son temporales

Las modas solo tienen un tiempo de vida, te hacen sentir anticuado pero no hay que dejarse llevar por cualquier brisa. Se consciente de lo que necesitas y sabes, lo más importante es saber en que inviertes tu energía «tiempo». Aprender justamente julia puede no ser una pérdida de tiempo si no lo acabas usando, también puedes aprender cosas muy útiles por el trayecto cómo es programar de una forma más estructurada o también aprender a meta-programar.


Editar publicación
Comparte esta publicación:

Publicación anterior
Reimplementación de crosstab
Siguiente publicación
De Vim a Neovim y de vuelta a Vim