# Julia (lenguaje de programación)

Julia es un lenguaje de programación homoicónico, multiplataforma y multiparadigma de tipado dinámico de alto nivel y alto desempeño para la computación genérica, técnica y científica.
Dispone de un compilador avanzado (JIT), mecanismos para la ejecución en paralelo y distribuida, además de una extensa biblioteca de funciones matemáticas. La biblioteca, desarrollada fundamentalmente en Julia, también contiene código desarrollado en C o Fortran, para el álgebra lineal, generación de números aleatorios, procesamiento de señales, y procesamiento de cadenas. Adicionalmente, la comunidad de desarrolladores de Julia contribuye con la creación y distribución de paquetes externos a través del gestor de paquetes integrado de Julia a un paso acelerado. IJulia es el resultado de la colaboración entre las comunidades de IPython y Julia. Proporciona una potente interfaz gráfica basada en el navegador para Julia.
La extensión de Visual Studio Code de Julia proporciona un entorno de desarrollo integrado con todas las funciones y soporte para depuración, análisis de errores y creación de perfiles.

## Historia

Julia se inició en el año 2009, por Jeff Bezanson, Stefan Karpinski, Viral B. Shah y Alan Edelman, quienes se propusieron crear un lenguaje libre que fuera rápido y de alto nivel. El 14 de febrero de 2012, el equipo lanzó un sitio web que explica por qué fue creado el lenguaje. En una entrevista con InfoWorld en abril de 2012, Karpinski dijo sobre el nombre «Julia»: «En realidad, no hay una buena razón. Parecía un nombre bonito». Bezanson dijo que eligió el nombre por recomendación de un amigo.
Desde el lanzamiento de 2012, Julia ha sido descargado por usuarios de más de diez mil empresas, con más de veinticuatro millones de descargas en enero de 2021 y se utiliza en más de mil quinientas universidades. La conferencia académica JuliaCon para usuarios y desarrolladores de Julia se ha celebrado anualmente desde 2014 dando la bienvenida a más de 28 900 espectadores únicos.
La versión 0.3 se publicó en agosto de 2014, la versión 0.4 en octubre de 2015, la versión 0.5 en octubre de 2016 y la versión 0.6 en junio de 2017. Tanto Julia 0.7 (una versión útil para probar paquetes y para saber cómo actualizarlos para 1.0 [45]) como la versión 1.0 se lanzaron el 8 de agosto de 2018.
El candidato de lanzamiento para Julia 1.0 (Julia 1.0.0-rc1) se lanzó el 7 de agosto de 2018, y la versión final un día después (actualmente las versiones más antiguas que aún se admiten son 1.0.x, con soporte a largo plazo durante al menos un año). Julia 1.1 se lanzó en enero de 2019 con una nueva función de idioma de «pila de excepciones». Julia 1.2 se lanzó en agosto de 2019 y tiene algún soporte integrado para navegadores web, y Julia 1.5 en agosto de 2020.
Julia 1.11.0 se lanzó el 7 de octubre de 2024 y, con ella, 1.10.5 se convirtió en la siguiente versión con soporte a largo plazo (LTS) (es decir, esas son las únicas dos versiones compatibles) y 1.6 ya no es una versión LTS.
Juliac permite ejecutar archivos binarios mucho más pequeños, ya que solo está disponible en la próxima versión Julia 1.12 (la versión "nightly" actual).

## Resumen de características

* El despacho múltiple: nos permite definir el comportamiento de las funciones a través de diversas combinaciones de tipos de argumentos.
* Sistema de tipado dinámico: tipos para la documentación, la optimización y el despacho de funciones.
* Buen desempeño, acercándose al de lenguajes estáticamente compilados como C.
* Gestor de paquetes integrado.
* Macros inspiradas en las de Lisp y otras herramientas para la meta-programación.
* Llamar funciones de Python: mediante el paquete PythonCall.
* Llamar funciones de C directamente: sin necesidad de usar envoltorios o APIs especiales.
* Poderosas características de línea de comandos para gestionar otros procesos.
* Diseñado para la computación paralela y distribuida.
* Corutinas: hilos ligeros «verdes».
* Los tipos definidos por el usuario son tan rápidos y compactos como los tipos estándar integrados.
* Generación automática de código eficiente y especializado para diferentes tipos de argumentos.
* Conversiones y promociones para tipos numéricos y de otros tipos, elegantes y extensibles.
* Soporte eficiente para Unicode, incluyendo UTF-8 pero sin limitarse solo a este.
* Licencia MIT: libre y de código abierto.

## Diseñado para el paralelismo y la computación en la nube

Julia no le impone al usuario ningún estilo de paralelismo en particular. En vez de esto, le provee con bloques de construcción clave para la computación distribuida, logrando hacer lo suficientemente flexible el soporte de varios estilos de paralelismo y permitiendo que los usuarios añadan más. El siguiente ejemplo demuestra de manera simple como contar el número de caras de una gran cantidad de volados en paralelo.
Esta computación es distribuida automáticamente a través de todos los nodos de computo disponibles y el resultado, el cual es reducido por la sumatoria, (+), es regresado al nodo que inició la computación.

## Uso

Julia incluye una terminal interactiva, llamada REPL en donde se puede visualizar automáticamente los resultados de la ejecución del programa o segmento de código.
Ejemplos:
Para más ejemplos, puede visitar la documentación de Julia, o varios otros recursos que pueden ayudar a los nuevos usuarios a empezar con Julia:
* Introducción a Julia en español, by Miguel Raz Guzmán (7 de abril de 2018)
* Julia and IJulia cheatsheet
* Learn Julia in a few minutes
* Learn Julia the Hard Way
* Julia by Example
* Hands-on Julia
* Tutorial for Homer Reid’s numerical analysis class
La consola interactiva presenta varios modos de uso, por ejemplo al teclear ; la consola de Julia pasa a ser una shell de comandos de linux:
y, al teclear ?, la consola de Julia pasara a modo de ayuda en la cual imprimirá la documentación para el comando introducido:
Usted puede ejecutar código de Julia en una sesión interactiva o guardado en un archivo con la extensión .jl y ejecutarlo desde la línea de comandos con la siguiente instrucción:
Julia presenta soporte por parte de Jupyter, un entorno en línea interactivo, a igual que juliabox.

## Libre, de código abierto y amigable con las librerías

El núcleo de la implementación está licenciado bajo la licencia MIT. Varias librerías usadas por el entorno de Julia incluyen sus propias licencias tales como la GPL, LGPL y BSD (de tal manera que el entorno, el cual consiste en el lenguaje, las interfaces de usuario y las librerías, está bajo la GPL). El lenguaje puede ser compilado como una librería compartida, para que los usuarios puedan combinar Julia con su propio código en C/Fortran o con librerías propietarias de terceros. Además, Julia le permite llamar funciones foráneas de librerías compartidas en C y Fortran de manera sencilla, sin tener que escribir código envoltorio e incluso sin tener que volver a compilar el código existente. Puede intentar llamar las funciones de una librería foránea directamente desde el intérprete interactivo de Julia, obteniendo retroalimentación inmediata. Véase la LICENCIA para más información sobre los términos completos del licenciamiento de Julia.