Paradigma | Multiparadigma : despacho múltiple (paradigma primario), funcional , matriz , procedimental ( imperativo ), estructurado , reflexivo , meta , multietapa [1] |
---|---|
Diseñado por | Jeff Bezanson , Alan Edelman , Stefan Karpinski , Viral B. Shah |
Revelador | Jeff Bezanson , Stefan Karpinski , Viral B. Shah y otros colaboradores [2] [3] |
Apareció por primera vez | 2012 ( 2012 ) | [4]
Versión estable | 1.11.0 [5] / 8 de octubre de 2024 y 1.10.5 (la única LTS ); |
Versión preliminar | 1.10.6 (LTS) [6] / 22 de octubre de 2024 ( 2024-10-22 ) y 1.11.2 [7] en desarrollo y 1.12.0-DEV con actualizaciones diarias |
Disciplina de mecanografía | Dinámico , [8] inferido , opcional , nominativo , paramétrico , fuerte [8] |
Lenguaje de implementación | Julia, C , C++ , LLVM , [9] Scheme (se utilizó el analizador; casi exclusivamente) |
Plataforma | Nivel 1: Macs x86-64 , IA-32 , Apple silicon ( ARM64 ) ; GPU Nvidia/ CUDA (en Linux) [10] Nivel 2: FreeBSD , Arm de 64 bits en Linux, GPU de Apple; GPU Intel/ OneAPI 6.2+ y GPU Nvidia (en Windows) Nivel 3: Arm de 32 bits ; RISC-V y PowerPC de 64 bits ; y GPU AMD/ ROCm 5.3+. |
Sistema operativo | Linux , macOS , Windows y FreeBSD |
Licencia | Instituto Tecnológico de Massachusetts (MIT) |
Extensiones de nombre de archivo | .jl |
Sitio web | JuliaLang.org |
Influenciado por | |
Julia es un lenguaje de programación dinámico de alto nivel y propósito general [16] , aún diseñado para ser rápido y productivo, [17] por ejemplo, para ciencia de datos, inteligencia artificial, aprendizaje automático, modelado y simulación, más comúnmente utilizado para análisis numérico y ciencia computacional . [18] [19] [20]
Los aspectos distintivos del diseño de Julia incluyen un sistema de tipos con polimorfismo paramétrico y el uso de despacho múltiple como paradigma de programación central , un compilador justo a tiempo (JIT) predeterminado [16] [21] (con soporte para compilación anticipada [22] [23] [24] ) y una recolección de basura eficiente . [25] En particular, Julia no admite clases con métodos encapsulados y, en su lugar, se basa en estructuras con métodos/funciones genéricos no vinculados a ellos.
Por defecto, Julia se ejecuta de forma similar a los lenguajes de script, utilizando su entorno de ejecución, y permite interacciones , [22] pero los programas/ código fuente de Julia también se pueden enviar opcionalmente a los usuarios en un archivo listo para instalar/ejecutar, que se puede hacer rápidamente, sin necesidad de nada preinstalado. [26] Los programas de Julia también se pueden compilar (por separado) en ejecutables binarios , incluso permitiendo la distribución sin código fuente, y los ejecutables pueden hacerse mucho más pequeños con Julia 1.12. Dicha compilación no es necesaria para la velocidad, aunque puede disminuir el costo de inicio de factor constante, ya que Julia también se compila cuando se ejecuta de forma interactiva, pero puede ayudar a ocultar el código fuente. Las características del lenguaje se pueden compilar por separado, por lo que Julia se puede utilizar, por ejemplo, con su entorno de ejecución o sin él (lo que permite ejecutables y bibliotecas más pequeños, pero está limitado en capacidades).
Los programas Julia pueden reutilizar bibliotecas de otros lenguajes llamándolas, por ejemplo, llamando a bibliotecas de C o Rust , y Julia (bibliotecas) también se puede llamar desde otros lenguajes, por ejemplo, Python y R , y varios paquetes de Julia se han puesto fácilmente a disposición desde esos lenguajes, en forma de bibliotecas de Python y R para los paquetes de Julia correspondientes. La llamada en cualquier dirección se ha implementado para muchos lenguajes, como todos estos.
La extensión 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 . [27] [28] [29] [30]
El trabajo en Julia comenzó en 2009, cuando Jeff Bezanson , Stefan Karpinski , Viral B. Shah y Alan Edelman 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 con una publicación de blog que explicaba la misión del lenguaje. [4] En una entrevista con InfoWorld en abril de 2012, Karpinski dijo sobre el nombre "Julia": "No hay una buena razón, en realidad. Simplemente parecía un nombre bonito". [19] Bezanson dijo que eligió el nombre por recomendación de un amigo, [31] y años después escribió:
¿Tal vez Julia signifique " El ceceo poco común de Jeff está automatizado"? [32]
La sintaxis de Julia ahora se considera estable, desde la versión 1.0 en 2018, y Julia tiene una garantía de compatibilidad con versiones anteriores para 1.x y también una promesa de estabilidad para la API documentada (estable) , mientras que en los años anteriores, en el desarrollo temprano previo a 0.7, la sintaxis (y la semántica) se cambiaban en las nuevas versiones. Todo el ecosistema (de paquetes registrados) usa la sintaxis nueva y mejorada, y en la mayoría de los casos se basa en nuevas API que se han agregado regularmente y, en algunos casos, se agregó sintaxis adicional menor de manera compatible con versiones posteriores, por ejemplo, en Julia 1.7.
En los 10 años transcurridos desde el lanzamiento de la versión pre-1.0 de Julia en 2012, la comunidad ha crecido. El ecosistema de paquetes de Julia tiene más de 11,8 millones de líneas de código (incluyendo documentación y pruebas). [33] La conferencia académica JuliaCon para usuarios y desarrolladores de Julia se ha celebrado anualmente desde 2014, y JuliaCon2020 [34] recibió a más de 28 900 espectadores únicos, [35] y luego JuliaCon2021 rompió todos los récords anteriores (con más de 300 presentaciones de JuliaCon2021 disponibles de forma gratuita en YouTube, en comparación con las 162 del año anterior) y 43 000 espectadores únicos durante la conferencia. [36]
Tres de los cocreadores de Julia han sido galardonados con el Premio James H. Wilkinson de Software Numérico 2019 (que se otorga cada cuatro años) "por la creación de Julia, un entorno innovador para la creación de herramientas de alto rendimiento que permiten el análisis y la solución de problemas de ciencias computacionales". [37] Además, Alan Edelman, profesor de matemáticas aplicadas en el MIT , ha sido seleccionado para recibir el Premio Sidney Fernbach de la IEEE Computer Society 2019 "por sus destacados avances en computación de alto rendimiento, álgebra lineal y ciencias computacionales y por sus contribuciones al lenguaje de programación Julia". [38]
Tanto Julia 0.7 [39] como la versión 1.0 se lanzaron el 8 de agosto de 2018. El trabajo en Julia 0.7 fue una "enorme tarea" (por ejemplo, debido a un "optimizador completamente nuevo"), y se realizaron algunos cambios en la semántica, por ejemplo, se simplificó la interfaz de iteración . [40]
Julia 1.6 fue la versión más grande desde 1.0, y fue la versión de soporte a largo plazo (LTS) durante más tiempo, más rápida en muchos frentes, por ejemplo, introdujo la precompilación paralela y una carga más rápida de paquetes, en algunos casos "50 veces más rápido en los tiempos de carga para árboles grandes de artefactos binarios". [41] A partir de la versión 1.7, el desarrollo de Julia ha vuelto a los lanzamientos basados en el tiempo . [42] Julia 1.7.0 se lanzó en noviembre de 2021 con muchos cambios, por ejemplo, un nuevo generador de números aleatorios más rápido . Julia 1.7.3 se lanzó el 25 de mayo de 2022, corrigiendo algunos problemas, incluida al menos una actualización de seguridad, [43] y 1.7.x ya no es compatible. Julia 1.8 se lanzó en 2022 (y versiones hasta 1.8.5 como seguimiento en enero de 2023, [44] ambas corrigiendo errores ( backporting ) e "invalidaciones", por lo que se compila más rápido), con mejoras para distribuir programas Julia sin código fuente y aceleración del compilador, en algunos casos en un 25%, [45] y una incrustación más controlable (es decir, ahora también permite la aplicación @inline
en el sitio de la llamada, no solo en la función en sí). Julia 1.9.0 se lanzó el 7 de mayo de 2023. Tiene muchas mejoras, como la capacidad de precompilar paquetes a código de máquina nativo (las versiones anteriores de Julia también tienen precompilación para paquetes, pero solo parcial, nunca completamente a código nativo, por lo que esas versiones anteriores tenían una penalización de "primer uso", que ralentizaba el proceso mientras se esperaba la compilación completa). Los paquetes precompilados, desde la versión 1.9, pueden ser hasta cientos de veces más rápidos en el primer uso (por ejemplo, para CSV.jl y DataFrames.jl), y para mejorar la precompilación de paquetes se ha introducido un nuevo paquete PrecompileTools.jl. Julia 1.10.0 se lanzó el 25 de diciembre de 2023 (y la actualización de Julia 1.10.5 el 27 de agosto de 2024) con muchas características nuevas, por ejemplo, recolección de basura paralela, tiempos de carga de paquetes mejorados y un nuevo analizador con mejores mensajes de error y representación mejorada del seguimiento de la pila. [46]
Julia 1.11.0 se lanzó el 7 de octubre de 2024 (y 1.11.1 el 16 de octubre), y con ella 1.10.5 se convirtió en la siguiente versión de soporte a largo plazo (LTS) (es decir, esas son las únicas dos versiones compatibles), y 1.6 ya no es una versión LTS. Julia 1.11 agrega, por ejemplo, una nueva public
palabra clave para señalar una API pública segura (se recomienda a los usuarios de Julia que utilicen dicha API, no interna, de Julia o paquetes, y se recomienda a los autores de paquetes que utilicen la palabra clave, generalmente de forma indirecta, por ejemplo, prefijada con la @compat
macro, de Compat.jl , para admitir también versiones anteriores de Julia, al menos la versión LTS). Julia 1.11.1 tiene un inicio mucho mejorado (con respecto a 1.11.0 que tuvo una regresión) y con respecto a 1.10, y esto puede ser importante para algunos puntos de referencia.
Es posible que algunos usuarios quieran posponer la actualización a 1.11 (por ejemplo, aquellos que llaman a Julia desde R), debido a una incompatibilidad temporal conocida de paquetes.
Es posible realizar ejecutables binarios mucho más pequeños, juliac
lo que solo estará disponible en la próxima versión Julia 1.12 (la versión "nocturna" actual).
Desde 2014, [47] la comunidad Julia ha organizado una conferencia anual de Julia centrada en desarrolladores y usuarios. La primera JuliaCon tuvo lugar en Chicago y dio inicio a la celebración anual de la conferencia. Desde 2014, la conferencia se ha celebrado en varios lugares, incluidos el MIT [48] y la Universidad de Maryland, Baltimore. [49] La audiencia del evento ha crecido de unas pocas docenas de personas a más de 28.900 asistentes únicos [50] durante JuliaCon 2020, que se celebró de forma virtual. JuliaCon 2021 también se celebró de forma virtual [51] con discursos de apertura de los profesores William Kahan , el arquitecto principal del estándar de punto flotante IEEE 754 (que utilizan prácticamente todas las CPU y lenguajes, incluida Julia), [52] Jan Vitek, [53] Xiaoye Sherry Li y Soumith Chintala, cocreador de PyTorch . [54] JuliaCon creció hasta alcanzar los 43.000 asistentes únicos y más de 300 presentaciones (aún de libre acceso, además de para los mayores). JuliaCon 2022 también se celebrará de forma virtual entre el 27 y el 29 de julio de 2022, por primera vez en varios idiomas, no solo en inglés.
El lenguaje Julia se convirtió en un proyecto patrocinado fiscalmente por NumFOCUS en 2014 en un esfuerzo por asegurar la sostenibilidad a largo plazo del proyecto. [55] Jeremy Kepner en el Laboratorio Lincoln del MIT fue el patrocinador fundador del proyecto Julia en sus inicios. Además, los fondos de la Fundación Gordon y Betty Moore , la Fundación Alfred P. Sloan , Intel y agencias como NSF , DARPA , NIH , NASA y FAA han sido esenciales para el desarrollo de Julia. [56] Mozilla , el creador del navegador web Firefox, con sus subvenciones de investigación para el primer semestre de 2019, patrocinó a "un miembro del equipo oficial de Julia" para el proyecto "Llevar Julia al navegador", [57] es decir, a Firefox y otros navegadores web. [58] [59] [60] [61] El lenguaje Julia también cuenta con el apoyo de donantes individuales en GitHub. [62]
JuliaHub, Inc. fue fundada en 2015 como Julia Computing, Inc. por Viral B. Shah , Deepak Vinchhi, Alan Edelman , Jeff Bezanson , Stefan Karpinski y Keno Fischer . [63] [64]
En junio de 2017, Julia Computing recaudó 4,6 millones de dólares en financiación inicial de General Catalyst y Founder Collective, [65] el mismo mes recibió "910.000 dólares de la Fundación Alfred P. Sloan para apoyar el desarrollo de código abierto de Julia, incluidos 160.000 dólares para promover la diversidad en la comunidad de Julia", [66] y en diciembre de 2019 la empresa recibió 1,1 millones de dólares de financiación del gobierno de Estados Unidos para "desarrollar una herramienta de aprendizaje automático de componentes neuronales para reducir el consumo total de energía de los sistemas de calefacción, ventilación y aire acondicionado (HVAC) en los edificios". [67] En julio de 2021, Julia Computing anunció que recaudó una ronda de Serie A de 24 millones de dólares liderada por Dorilton Ventures, [68] que también es propietaria del equipo de Fórmula 1 Williams Racing , que se asoció con Julia Computing. El director comercial de Williams dijo: "Invertir en empresas que construyen la mejor tecnología en la nube es un enfoque estratégico para Dorilton y la versátil plataforma de Julia, con capacidades revolucionarias en simulación y modelado, es enormemente relevante para nuestro negocio. Esperamos integrar Julia Computing en el deporte tecnológicamente más avanzado del mundo". [69] En junio de 2023, JuliaHub recibió (de nuevo, ahora bajo su nuevo nombre) una nueva inversión estratégica de $ 13 millones liderada por AE Industrial Partners HorizonX ("AEI HorizonX"). AEI HorizonX es una plataforma de inversión de capital de riesgo formada en asociación con The Boeing Company , que utiliza Julia. [70] El trabajo de Tim Holy (en el Holy Lab de la Universidad de Washington en St. Louis ) sobre Julia 1.9 (mejora de la capacidad de respuesta) fue financiado por la Iniciativa Chan Zuckerberg .
Julia es un lenguaje de programación de propósito general , [71] aunque también fue diseñado originalmente para computación numérica/técnica. También es útil para programación de sistemas de bajo nivel , [72] como lenguaje de especificación , [73] herramienta de síntesis de alto nivel (HLS) (para hardware, por ejemplo, FPGAs ), [74] y para programación web [75] tanto en el lado del servidor [76] [77] como del cliente [78] [79] .
Las principales características del lenguaje son:
El envío múltiple (también denominado multimétodos en Lisp) es una generalización del envío único (el mecanismo polimórfico utilizado en lenguajes de programación orientada a objetos (OOP) comunes, como Python , C++ , Java , JavaScript y Smalltalk ) que utiliza herencia . En Julia, todos los tipos concretos son subtipos de tipos abstractos, directa o indirectamente subtipos del Any
tipo que se encuentra en la cima de la jerarquía de tipos. Los tipos concretos no pueden subtipificarse como en otros lenguajes; en su lugar, se utiliza la composición (consulte también herencia vs. subtipificación ).
De forma predeterminada, el entorno de ejecución de Julia debe estar preinstalado a medida que se ejecuta el código fuente proporcionado por el usuario. Como alternativa, las aplicaciones de Julia (GUI) se pueden agrupar rápidamente en un solo archivo con AppBundler.jl [26] para "crear aplicaciones de GUI de Julia en formatos de instalación de aplicaciones de escritorio modernos. Utiliza Snap para Linux, MSIX para Windows y DMG para MacOS como destinos. Agrupa Julia completa dentro de la aplicación". [80] PackageCompiler.jl puede crear ejecutables independientes que no necesitan código fuente de Julia para ejecutarse. [22]
En Julia, todo es un objeto, al igual que en los lenguajes orientados a objetos; sin embargo, a diferencia de la mayoría de los lenguajes orientados a objetos, todas las funciones utilizan despachos múltiples para seleccionar métodos, en lugar de un despacho único.
La mayoría de los paradigmas de programación se pueden implementar utilizando macros y paquetes homoicónicos de Julia. Las macros sintácticas de Julia (usadas para metaprogramación ), al igual que las macros de Lisp, son más poderosas que las macros de sustitución de texto utilizadas en el preprocesador de algunos otros lenguajes como C, porque funcionan a nivel de árboles de sintaxis abstracta (AST). El sistema de macros de Julia es higiénico , pero también admite la captura deliberada cuando se desea (como para las macros anafóricas ) utilizando la esc
construcción.
Julia se inspira en varios dialectos de Lisp, incluidos Scheme y Common Lisp , y comparte muchas características con Dylan , también un lenguaje dinámico orientado al despacho múltiple (que presenta una sintaxis de infijo en lugar de una sintaxis de prefijo similar a Lisp, mientras que en Julia "todo" [81] es una expresión ), y con Fortress , otro lenguaje de programación numérica (que presenta despacho múltiple y un sofisticado sistema de tipos paramétricos). Si bien Common Lisp Object System (CLOS) agrega despacho múltiple a Common Lisp, no todas las funciones son funciones genéricas.
En Julia, Dylan y Fortress, la extensibilidad es la opción predeterminada y las funciones integradas del sistema son todas genéricas y extensibles. En Dylan, el envío múltiple es tan fundamental como en Julia: todas las funciones definidas por el usuario e incluso las operaciones integradas básicas como +
son genéricas. Sin embargo, el sistema de tipos de Dylan no admite por completo los tipos paramétricos, que son más típicos del linaje de lenguajes ML . De forma predeterminada, CLOS no permite el envío en los tipos paramétricos de Common Lisp; dicha semántica de envío extendida solo se puede agregar como una extensión a través del Protocolo de metaobjetos CLOS . Por diseño convergente, Fortress también cuenta con envío múltiple en tipos paramétricos; sin embargo, a diferencia de Julia, Fortress tiene tipos estáticos en lugar de dinámicos, con fases de compilación y ejecución separadas. Las características del lenguaje se resumen en la siguiente tabla:
Idioma | Sistema de tipos | Funciones genéricas | Tipos paramétricos |
---|---|---|---|
Julia | Dinámica | Por defecto | Sí |
Ceceo común | Dinámica | Optar por participar | Sí (pero no hay envío) |
Dylan | Dinámica | Por defecto | Parcial (sin envío) |
Fortaleza | Estático | Por defecto | Sí |
Un ejemplo de la extensibilidad de Julia, el paquete Unitful.jl agrega soporte para unidades físicas de medida al lenguaje.
Julia tiene soporte integrado para llamar a bibliotecas de lenguaje C o Fortran mediante la @ccall
macro. Las bibliotecas adicionales permiten a los usuarios trabajar con Python , [82] R , [83] C++ , [84] Java , [85] y SQL . [86] [87] [88] [89]
Julia se puede compilar en ejecutables binarios con PackageCompiler.jl. [22] También se pueden escribir ejecutables más pequeños utilizando un subconjunto estático del lenguaje proporcionado por StaticCompiler.jl que no admite el envío en tiempo de ejecución (ni la recolección de basura, ya que excluye el tiempo de ejecución que lo proporciona). [90]
La distribución oficial de Julia incluye un bucle de lectura-evaluación-impresión (REPL) interactivo de línea de comandos , [91] con un historial de búsqueda, autocompletado con tabulación y modos de ayuda y shell dedicados , [92] que se pueden usar para experimentar y probar código rápidamente. [93] El siguiente fragmento representa un ejemplo de sesión de muestra donde las cadenas se concatenan automáticamente mediante println: [94]
julia> p ( x ) = 2 x ^ 2 + 1 ; f ( x , y ) = 1 + 2 p ( x ) y julia> println ( "¡Hola mundo!" , "Estoy en la nube" , f ( 0 , 4 ), "ya que Julia admite una sintaxis reconocible!" ) ¡Hola mundo! ¡Estoy en la nube 9 ya que Julia admite una sintaxis reconocible!
El REPL permite al usuario acceder al shell del sistema y al modo de ayuda, presionando ;
o ?
después del mensaje de solicitud (antes de cada comando), respectivamente. También guarda el historial de comandos, incluso entre sesiones. [95] El código se puede probar dentro de la sesión interactiva de Julia o guardar en un archivo con una .jl
extensión y ejecutar desde la línea de comandos escribiendo: [81]
$ julia <nombre de archivo>
Julia usa códigos UTF-8 y LaTeX , lo que le permite soportar símbolos matemáticos comunes para muchos operadores, como ∈ para el in
operador, que se puede escribir \in
presionando Tab ↹(es decir, usa códigos LaTeX , o también es posible simplemente copiando y pegando, por ejemplo, √ y ∛ son posibles para las funciones sqrt y cbrt ). Julia tiene soporte para la última versión principal Unicode 15.0 (Julia 1.11-DEV es compatible con la última versión 15.1 [96] ) [97] para los idiomas del mundo, incluso para el código fuente, por ejemplo, nombres de variables (aunque se recomienda usar inglés para el código público y, por ejemplo, nombres de paquetes).
Julia es compatible con Jupyter , un entorno de "cuadernos" interactivo en línea, [98] y Pluto.jl, un "cuadernos reactivo" (donde los cuadernos se guardan como archivos Julia puros), un posible reemplazo para el tipo anterior. [99] Además, el sistema de publicación Quarto de Posit (anteriormente RStudio Inc) admite Julia, Python, R y Observable JavaScript (estos lenguajes tienen soporte oficial por parte de la empresa, e incluso se pueden combinar en el mismo documento de cuaderno; hay más lenguajes que son compatibles de manera no oficial). [100] [101]
El REPL se puede ampliar con modos adicionales, y se ha hecho con paquetes, por ejemplo, con un modo SQL , [102] para el acceso a la base de datos, y RCall.jl agrega un modo R , para trabajar con el lenguaje R. [ 103]
Julia es en la práctica interoperable con otros lenguajes, de hecho la mayoría de los 20 lenguajes más populares. Julia se puede utilizar para llamar a funciones de bibliotecas compartidas de forma individual, como las escritas en C o Fortran, y hay paquetes disponibles para permitir llamar a otros lenguajes (que no proporcionan funciones exportadas a C directamente) p. ej. Python (con PythonCall.jl), R, [104] MATLAB, C# (y otros lenguajes .NET con DotNET.jl, desde ellos con JdotNET), JavaScript, Java (y otros lenguajes JVM, como Scala con JavaCall.jl). Y los paquetes para otros lenguajes permiten llamar a Julia, p. ej. desde Python, R (hasta Julia 1.10.x actualmente posible [105] ), Rust , Ruby o C#. Como por ejemplo con juliacall (parte de PythonCall.jl) para llamar desde Python y un paquete JuliaCall diferente para llamar, Julia hasta 1.10.x, desde R. Julia también se ha utilizado para hardware, es decir para compilar a VHDL , como una herramienta de síntesis de alto nivel , por ejemplo FPGAs . [74]
Julia tiene paquetes que admiten lenguajes de marcado como HTML (y también para HTTP ), XML , JSON y BSON , y para bases de datos (como PostgreSQL, [106] Mongo, [107] Oracle, incluido TimesTen , [108] MySQL, SQLite, Microsoft SQL Server, [107] Amazon Redshift, Vertica, ODBC) y uso web en general. [109] [110]
Julia tiene un administrador de paquetes integrado e incluye un sistema de registro predeterminado. [111] Los paquetes se distribuyen con mayor frecuencia como código fuente alojado en GitHub , aunque también se pueden usar alternativas. Los paquetes también se pueden instalar como binarios, utilizando artefactos. [112] El administrador de paquetes de Julia se utiliza para consultar y compilar paquetes, así como para administrar entornos. Se admiten registros de paquetes federados, lo que permite agregar registros distintos del oficial de forma local. [113]
El núcleo de Julia está implementado en Julia y C , junto con C++ para la dependencia de LLVM . El análisis de código, la reducción de código y el arranque se implementaron en FemtoLisp, un dialecto de Scheme , hasta la versión 1.10. [114] Desde esa versión, el nuevo paquete JuliaSyntax.jl, puro para Julia , se utiliza para el análisis (aunque el antiguo aún se puede elegir) [115], lo que mejora la velocidad y "mejora en gran medida los mensajes de error del analizador en varios casos". [116] El proyecto de infraestructura del compilador LLVM se utiliza como back-end para generar código de máquina optimizado para todas las plataformas de uso común. Con algunas excepciones, la biblioteca estándar se implementa en Julia.
Julia tiene soporte nativo para macOS de nivel 1, para Macs con Apple Silicon de 64 bits (anteriormente, las Macs con Apple M1 solo eran compatibles si se ejecutaban en la emulación Rosetta 2 [117] [118] ), y también es totalmente compatible con Macs con procesador Intel. Windows en ARM aún no tiene soporte oficial. Julia tiene "soporte inicial para OpenBSD en Julia", pero se están desarrollando más cosas para que realmente funcione: https://github.com/JuliaLang/julia/issues/53632 -->
Julia tiene cuatro niveles de soporte. [119] Todos los procesadores IA-32 que implementan completamente la subarquitectura i686 son compatibles y todos los x86-64 de 64 bits (también conocidos como amd64 ), es decir, todos los que tienen menos de una década de antigüedad son compatibles. Los procesadores Armv8 ( AArch64 ) son compatibles en el primer nivel (para macOS); de lo contrario, el segundo nivel en Linux y ARMv7 (AArch32) en el tercer nivel. [120] Cientos de paquetes están acelerados por GPU : [121] Las GPU de Nvidia tienen soporte con CUDA .jl (nivel 1 en Linux de 64 bits y nivel 2 en Windows de 64 bits, el paquete que implementa PTX , para capacidad de cómputo 3.5 (Kepler) o superior; ambos requieren CUDA 11+, las versiones de paquetes más antiguas funcionan hasta CUDA 9). También hay paquetes adicionales que admiten otros aceleradores, como las TPU de Google , [122] y algunas GPU Intel (integradas), a través de oneAPI.jl , [123] y las GPU de AMD tienen soporte con, por ejemplo, OpenCL ; y soporte experimental para la pila AMD ROCm . [124]
En algunas plataformas, Julia puede necesitar ser compilada desde el código fuente (por ejemplo, la Raspberry Pi original ), con opciones de compilación específicas, lo que se ha hecho y hay binarios precompilados no oficiales (e instrucciones de compilación) disponibles. [125] [126] Julia ha sido construida para varias plataformas ARM, desde pequeñas Raspberry Pis hasta la supercomputadora más rápida del mundo (en un momento, hasta hace poco) Fugaku , la A64FX basada en ARM . [127] PowerPC (64 bits) tiene soporte de nivel 3, lo que significa que "puede o no compilarse". Julia ahora es compatible con Raspbian [128] mientras que el soporte es mejor para Pis más nuevos, por ejemplo, aquellos con Armv7 o más nuevos; el soporte de Julia es promovido por la Raspberry Pi Foundation . [129] Julia también ha sido construida para RISC-V de 64 bits , [130] [131] que tiene algún código de soporte en el núcleo de Julia.
Si bien Julia requiere un sistema operativo de forma predeterminada y no tiene soporte oficial para ejecutarse sin o en plataformas de sistemas integrados como Arduino , el código de Julia aún se ha ejecutado en él, con algunas limitaciones, es decir, en un microcontrolador AVR de 16 MHz y 8 bits ( ATmega328P ) Arduino con 2 KB de RAM (más 32 KB de memoria flash). [132] [133]
Julia ha sido adoptada en muchas universidades, entre ellas el MIT , Stanford , UC Berkeley , la Universidad Ferdowsi de Mashhad y la Universidad de Ciudad del Cabo . Grandes empresas privadas de muchos sectores han adoptado el lenguaje, entre ellas Amazon , IBM , JP Morgan AI Research, [134] y ASML . Julia también ha sido utilizada por agencias gubernamentales, entre ellas la NASA y la FAA , así como por todos los laboratorios nacionales de energía de Estados Unidos. [17] [135]
Julia se utiliza ampliamente para el desarrollo de fármacos en la industria farmacéutica, habiendo sido adoptada por Moderna , Pfizer , AstraZeneca , Procter & Gamble y United Therapeutics . [155] [156]
Las funciones generadas de Julia están estrechamente relacionadas con el paradigma de programación multietapa (MSP) popularizado por Taha y Sheard, que generaliza las etapas de tiempo de compilación/tiempo de ejecución de la ejecución del programa al permitir múltiples etapas de ejecución de código retrasada.
Hemos demostrado que el rendimiento se acerca e incluso a veces supera al de CUDA C en una selección de aplicaciones de la suite de pruebas Rodinia
Ha co-diseñado el lenguaje de programación Scheme, que ha influido enormemente en el diseño de Julia
Dado que la versión 1.7 no está muy lejos (se lanzarán versiones programadas en el futuro)
El arranque tardaba unos 80 segundos antes, pero en esta solicitud de incorporación de cambios el tiempo se reduce a unos 60 segundos.
La JuliaCon de este año fue la más grande y mejor de la historia, con más de 300 presentaciones disponibles de forma gratuita en YouTube, más de 20 000 inscripciones y más de 43 000 espectadores únicos de YouTube durante la conferencia, en comparación con las 162 presentaciones, 10 000 inscripciones y 28 900 espectadores únicos de YouTube durante la conferencia del año pasado.
ejecución de intérpretes de lenguaje en WebAssembly. Para aumentar aún más el acceso a las principales herramientas de ciencia de datos, buscamos a alguien que porte R o Julia a WebAssembly e intente proporcionar un complemento de lenguaje de nivel 3 para Iodide: conversión automática de tipos básicos de datos entre R/Julia y Javascript, y la capacidad de compartir instancias de clase entre R/Julia y Javascript.
Imaginamos un flujo de trabajo futuro que le permita realizar su procesamiento de datos en Python, ajustar un modelo rápido en R o JAGS, resolver algunas ecuaciones diferenciales en Julia y luego mostrar sus resultados con una visualización interactiva en vivo de d3+JavaScript... y todo eso dentro de un solo archivo portátil, compartible y pirateable.
Propósito general [..] Julia te permite escribir interfaces de usuario, compilar tu código estáticamente o incluso implementarlo en un servidor web.
Sistema de prevención de colisiones aerotransportado
Presentamos un prototipo de herramienta Julia HLS, escrita en Julia, que transforma el código Julia a VHDL.
En resumen, aunque Julia carece de una solución de servidor multiproceso actualmente lista para usar, podemos aprovechar fácilmente sus funciones de distribución de procesos y una tecnología de equilibrio de carga muy popular para obtener una utilización completa de la CPU para el manejo de HTTP.
puedes instalar el paquete Julia OhMyREPL.jl [..] que te permite personalizar la apariencia y el comportamiento del REPL
string(greet, ", ", whom, ".\n")
ejemplo de las formas preferidas de concatenar cadenas. Julia tiene las funciones println e print, pero también una macro @printf (es decir, no en forma de función) para eliminar la sobrecarga en tiempo de ejecución del formateo (a diferencia de la misma función en C).Para mí, RCall se carga sin problemas en Julia 1.11 en MacOS
Hay disponible una lista de problemas conocidos de ARM.
Casi 300 paquetes dependen directa o indirectamente de las capacidades de la GPU de Julia.
Julia funciona en todas las variantes de Pi, recomendamos usar Pi 3.
Casi todas las características del SDK de Python se han reimplementado en Julia; para las pocas que no lo están, también ofrecemos un paquete subsidiario, PyBraket.jl, que le permite traducir objetos de Julia a sus equivalentes de Python y llamar al SDK de Python.
Julia y la primera observación de Ω
-
_b → Ξ
+
_c K
-
π
-
Resumen: Julia está lista para usarse en análisis HEP de física.
Actualizar la versión de Julia a 1.7.3
El equipo de pruebas de vuelo pudo demostrar... un vehículo de despegue y aterrizaje vertical con sistemas de propulsión de combustible tanto eléctricos como convencionales a bordo. El[
sistema aéreo no tripulado]
pudo planificar y ejecutar estas misiones de forma autónoma utilizando el hardware integrado. Fue la primera vez que se utilizó el lenguaje de programación Julia en el hardware integrado: los algoritmos se precompilaron con antelación.
Nuevas subespecificaciones de Model1002 para estimar el DSGE con shocks de COVID-19