1. La Motivación El problema de los dos lenguajes y por qué nació Julia. 2. Caracterı́sticas Principales JIT, Despacho Múltiple y Metaprogramación. JULIA SciML, Finanzas, Data Science y Supercomputación. 4. Julia en Acción & Próximos Pasos Sintaxis, ejemplos de código y cómo empezar hoy. Abraham Zamudio Chauca 2 / 43
(Python, R, MATLAB) (C, C++, Fortran) Lento en ejecución Complejo de escribir ¿Existe un punto medio? ¿Por qué necesitamos un nuevo lenguaje? JULIA Abraham Zamudio Chauca 3 / 43
decisión difı́cil: • Opción A: Usar un lenguaje rápido en ejecución pero complejo de escribir (C, C++, Fortran). • Opción B: Usar un lenguaje fácil y productivo pero lento en ejecución (Python, R, MATLAB). JULIA Abraham Zamudio Chauca 4 / 43
legible y concisa. • Curva de aprendizaje suave. • Ecosistema rico en librerı́as de datos. Desventajas • Ejecución lenta (interpretados). • Cuellos de botella en bucles y operaciones matemáticas intensivas. JULIA Abraham Zamudio Chauca 5 / 43
computacional máximo. • Control fino sobre la memoria y el hardware. Desventajas • Sintaxis compleja y verbosa. • Tiempos de desarrollo largos. • Mayor propensión a errores de memoria. JULIA Abraham Zamudio Chauca 6 / 43
a errores Prototipo en Python/R Producción en C++ • Esto obligaba a los equipos a duplicar esfuerzos. • El código de producción a menudo divergı́a del prototipo original. JULIA Abraham Zamudio Chauca 7 / 43
MIT con una misión fundamental: resolver este problema. Propuesta de Valor ”Walks like Python, runs like C” Ofrecer la facilidad y legibilidad de Python, manteniendo un rendimiento computacional comparable al de C. JULIA Abraham Zamudio Chauca 8 / 43
por lı́nea). • El código de Julia se compila a código máquina nativo justo antes de ejecutarse. • Utiliza la infraestructura del compilador LLVM. JULIA Abraham Zamudio Chauca 11 / 43
(JIT) Código Máquina Nativo Esto permite que los bucles y operaciones matemáticas se ejecuten a velocidades nativas. JULIA Abraham Zamudio Chauca 12 / 43
por lı́nea. • Verifica tipos en cada operación. • Sobrecarga constante. • Compila la función la primera vez JULIA que se llama. • Las siguientes llamadas usan el código nativo optimizado. • Velocidad de C/Fortran. Abraham Zamudio Chauca 13 / 43
El lenguaje elige qué implementación de una función ejecutar basándose en los tipos de todos los argumentos que recibe. Esto contrasta con la Programación Orientada a Objetos (OOP) tradicional, que solo despacha basándose en el primer argumento (el objeto). JULIA Abraham Zamudio Chauca 14 / 43
método pertenece al objeto. • Julia: funcion(objeto, argumento). La función es genérica y su comportamiento cambia según la combinación de tipos. Beneficio Permite que el código sea extremadamente genérico, modular y rápido, facilitando la extensión de librerı́as sin modificar su código fuente. JULIA Abraham Zamudio Chauca 15 / 43
tipos procesar(x::Int) = println("Es un entero: ", x) procesar(x::Float64) = println("Es un flotante: ", x) procesar(x::String) = println("Es un texto: ", x) procesar(10) # Imprime: Es un entero: 10 procesar(3.14) # Imprime: Es un flotante: 3.14 procesar("Julia") # Imprime: Es un texto: Julia JULIA Abraham Zamudio Chauca 16 / 43
tipo de dato. • Ideal para prototipado rápido y exploración de datos. • El compilador infiere los tipos automáticamente para mantener el rendimiento. x = 10 # x es Int64 x = 3.14 # Ahora x es Float64 x = "Hola" # Ahora x es String JULIA Abraham Zamudio Chauca 17 / 43
tipo cuando lo necesites. • Usos: 1. Optimizar cuellos de botella especı́ficos. 2. Documentar estructuras de datos complejas. 3. Crear métodos especializados mediante Despacho Múltiple. JULIA Abraham Zamudio Chauca 18 / 43
y manipular su propio código de forma nativa. • Similar a lo que permite Lisp. • Se logra principalmente a través de Macros. • El código se trata como un objeto de datos (Árbol de Sintaxis Abstracta - AST). JULIA Abraham Zamudio Chauca 19 / 43
avanzadas. • Permite desarrollar Lenguajes de Dominio Especı́fico (DSL) embebidos. • Ejemplo: Paquetes como JuMP.jl para optimización matemática usan metaprogramación para que las restricciones se escriban de forma natural. JULIA Abraham Zamudio Chauca 20 / 43
∂∂ut + (u · ∇)u = −∇p + µ∇2u + f • SciML: Ecuaciones diferenciales • Simulación de sistemas complejos • Modelado climático y fı́sico • Proyecto Celeste: 1.5 petaflops • 200 millones de objetos catalogados • Supercomputación a exaescala Finanzas Cuantitativas Data Science & ML • DataFrames.jl: Análisis de datos • Flux.jl: Deep Learning puro • Auto-diferenciación nativa JULIA • Análisis de riesgo (VaR) • Trading de alta frecuencia (HFT) • Modelos predictivos macro Abraham Zamudio Chauca 23 / 43
de elección para: • Resolver ecuaciones diferenciales ordinarias (ODE) y estocásticas (SDE). • Modelado climático y meteorológico. • Farmacologı́a cuantitativa y biologı́a de sistemas. • Fı́sica computacional de alta precisión. JULIA Abraham Zamudio Chauca 24 / 43
de telescopios para catalogar objetos astronómicos. • Escala: Casi 200 millones de objetos. • Logro: Alcanzó 1.5 petaflops de rendimiento en supercomputadoras. JULIA Abraham Zamudio Chauca 25 / 43
para C o Fortran Demostró que un lenguaje dinámico y de alto nivel puede competir en la cima de la supercomputación mundial. JULIA Abraham Zamudio Chauca 26 / 43
velocidad y capacidad de manejo de datos tabulares. • Ventajas: ◦ Mejor manejo de memoria. ◦ Operaciones agrupadas (groupby) altamente optimizadas. ◦ Sintaxis inspirada en R y SQL. JULIA Abraham Zamudio Chauca 27 / 43
Julia para el entrenamiento de redes neuronales. • Sin depender de motores ocultos en C++ (a diferencia de PyTorch/TensorFlow que son wrappers). • Permite diferenciar automáticamente cualquier código de Julia (Automatic Differentiation). JULIA Abraham Zamudio Chauca 28 / 43
alta frecuencia (HFT), la latencia es dinero. Julia permite escribir la lógica de negocio de forma clara (como en Python) pero ejecutarse con la latencia mı́nima requerida para competir en los mercados, sin la necesidad de escribir el núcleo en C++. JULIA Abraham Zamudio Chauca 30 / 43
• Definición concisa de funciones en una sola lı́nea. • ˆ es el operador de potenciación nativo. • No se requieren palabras clave como def o return para funciones simples. JULIA Abraham Zamudio Chauca 34 / 43
• Los corchetes [] crean un Array (vector). • Al usar 1.0, Julia infiere que es un arreglo de Float64. • Los ı́ndices en Julia comienzan en 1 (no en 0), lo cual es más natural para matemáticos y economistas. JULIA Abraham Zamudio Chauca 35 / 43
el punto (.)? Es una caracterı́stica nativa de vectorización. Le indica a Julia que aplique la función f a cada elemento del arreglo numeros individualmente. JULIA Abraham Zamudio Chauca 36 / 43
librerı́as externas (ej: NumPy). • En Julia, el broadcasting es nativo. • Loop Fusion: El compilador fusiona automáticamente las operaciones, evitando crear arreglos intermedios en memoria. • Resultado: Código altamente eficiente y legible. JULIA Abraham Zamudio Chauca 37 / 43
Julia no viene a eliminar a lenguajes consolidados (Python, R, C++). Viene a ocupar un espacio vital donde la expresividad del código y el rendimiento puro son requisitos no negociables. Además, puede llamar a librerı́as de Python, C y R fácilmente. JULIA Abraham Zamudio Chauca 39 / 43
lenguaje (no es una herramienta externa como pip o conda). • Elimina los clásicos dolores de cabeza de los entornos virtuales y conflictos de dependencias. • Manejo nativo de entornos por proyecto (archivos Project.toml). JULIA Abraham Zamudio Chauca 40 / 43
2. Abre el REPL (Read-Eval-Print Loop), la terminal interactiva de Julia. 3. Escribe tu primera operación matemática o instala un paquete con ] add DataFrames. JULIA Abraham Zamudio Chauca 41 / 43
experiencia con Python, R o MATLAB, la curva de adaptación a la sintaxis básica de Julia es de apenas unos dı́as. La complejidad adicional (tipado, despacho múltiple) se puede aprender gradualmente a medida que se necesitan optimizaciones. JULIA Abraham Zamudio Chauca 42 / 43