Julia es un lenguaje de programación dinámico de alto nivel y de propósito general [21] , más comúnmente utilizado para análisis numérico y ciencia computacional . [22] [23] [24] 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 , recolección de basura eficiente , [25] y un sistema justo a tiempo (JIT) compilador [21] [26] (con soporte para compilación anticipada [27] [28] [29] ).
Julia se puede ejecutar de manera similar a los lenguajes de scripting (interpretados) (es decir, Julia tiene un REPL ) y [ se necesita aclaración ] de forma predeterminada usando su tiempo de ejecución (cuando está preinstalado), [27] pero los programas/ código fuente de Julia también se pueden enviar opcionalmente a usuarios en un archivo listo para instalar/ejecutar, que se puede crear rápidamente y no necesita nada preinstalado. [ cita necesaria ] Los programas de Julia también se pueden compilar (por separado) en ejecutables binarios , incluso permitiendo la distribución sin código fuente. Esta compilación no es necesaria para aumentar la velocidad, 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 usar, por ejemplo, con su tiempo de ejecución o sin él (lo que permite bibliotecas y ejecutables más pequeños, pero tiene capacidades limitadas).
Los programas de Julia pueden reutilizar bibliotecas de otros lenguajes llamándolas, por ejemplo, llamando a bibliotecas de C o Rust , y también se pueden llamar a Julia (bibliotecas) desde otros lenguajes, por ejemplo, Python y R , y varios paquetes de Julia se han puesto a disposición fácilmente desde esos lenguajes. en forma de bibliotecas Python y R para los paquetes Julia correspondientes. Se han implementado llamadas en cualquier dirección para muchos idiomas, 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, linting y creación de perfiles . [30] [31] [32] [33]
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 explica la misión del idioma. [34] En una entrevista con InfoWorld en abril de 2012, Karpinski dijo sobre el nombre "Julia": "En realidad, no hay una buena razón. Simplemente parecía un nombre bonito". [23] Bezanson dijo que eligió el nombre por recomendación de un amigo, [35] y años después escribió:
¿Quizás julia significa " el ceceo poco común de Jeff está automatizado"? [36]
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.xy también una promesa de estabilidad para la API documentada (estable) , mientras que en los años anteriores, en el desarrollo inicial anterior a 0.7, La sintaxis (y la semántica) se cambió en las nuevas versiones. Todo el ecosistema (paquete registrado) utiliza 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ó una sintaxis adicional menor de manera compatible con versiones posteriores, por ejemplo, en Julia 1.7.
En los 10 años transcurridos desde el lanzamiento en 2012 de la versión 1.0 de Julia, la comunidad ha crecido. El ecosistema del paquete Julia tiene más de 11,8 millones de líneas de código (incluidos documentos y pruebas). [37] La conferencia académica JuliaCon para usuarios y desarrolladores de Julia se lleva a cabo anualmente desde 2014: JuliaCon2020 [38] recibió a más de 28 900 espectadores únicos, [39] y luego JuliaCon2021 rompió todos los récords anteriores (con más de 300 presentaciones de JuliaCon2021 disponibles de forma gratuita en YouTube, frente a 162 el año anterior), y 43.000 espectadores únicos durante la conferencia. [40]
Tres de los cocreadores de Julia recibieron el Premio James H. Wilkinson de Software Numérico 2019 (otorgado 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 solución de problemas de ciencia computacional." [41] 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 avances sobresalientes en computación de alto rendimiento, álgebra lineal y ciencia computacional y por contribuciones al Instituto Julia lenguaje de programación." [42]
Tanto Julia 0.7 [43] como la versión 1.0 se lanzaron el 8 de agosto de 2018. El trabajo en Julia 0.7 fue una "gran tarea" (por ejemplo, debido a un "optimizador completamente nuevo") y se realizaron algunos cambios en la semántica, por ejemplo, la iteración. La interfaz se simplificó. [44] Julia 1.1 se lanzó en enero de 2019 con una nueva función de "pila de excepciones". Julia 1.2 se lanzó en agosto de 2019 con soporte integrado para navegadores web. [45] Julia 1.3 agregó paralelismo multiproceso componible y un sistema de artefactos binarios para los paquetes de Julia. [46] Julia 1.4 agregó sintaxis para la indexación de matrices genéricas para manejar, por ejemplo, matrices basadas en 0 . [47] El modelo de memoria también fue cambiado. [48] Julia 1.5, lanzada en agosto de 2020, agregó soporte de depuración de grabación y reproducción , [49] para la herramienta rr de Mozilla . El lanzamiento cambió el comportamiento en REPL (alcance suave) al que se usa en Jupyter , pero es totalmente compatible con código que no es REPL. La mayor parte de la API de subprocesos se marcó como estable y, con esta versión, "los objetos inmutables arbitrarios, independientemente de si tienen campos que hacen referencia a objetos mutables o no, ahora se pueden asignar en pila", [50] reduciendo las asignaciones de montón, por ejemplo, views
ya no asignando. Julia 1.5 se centró en el rendimiento del llamado "tiempo hasta el primer trazado" (TTFP, también llamado TTFX, para la primera X, el problema más general), en general, la velocidad de compilación en sí (a diferencia del rendimiento del código generado). ) y herramientas agregadas para que los desarrolladores mejoren la carga de paquetes. [51] Julia 1.6 fue la versión más grande desde la 1.0, más rápida en muchos frentes, por ejemplo, introdujo una precompilación paralela y una carga más rápida de paquetes, en algunos casos "aceleración de 50 veces en los tiempos de carga para grandes árboles de artefactos binarios". [52] A partir de la versión 1.7, el desarrollo de Julia vuelve a ser versiones basadas en el tiempo . [53] 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 y solucionó algunos problemas, incluida al menos una actualización de seguridad, [54] y 1.7.x ya no es compatible. Julia 1.8 se lanzó en 2022 (y las versiones hasta 1.8.5 como seguimiento en enero de 2023, [55] corrigiendo errores ( backporting ) e "invalidaciones", compilando así más rápido), con mejoras para distribuir programas de Julia sin código fuente. y aceleración del compilador, en algunos casos en un 25%, [56] y una inserción en línea más controlable (es decir,ahora también permite aplicar@inline
en el sitio de la llamada, no sólo en la función misma). Julia 1.9.0 se lanzó el 7 de mayo de 2023 (y posteriormente 1.9.4, la última versión estable). Tiene muchas mejoras, como solucionar el problema TTFX/TTFP; Las versiones anteriores tienen precompilación de paquetes, pero no se precompilaron completamente en código nativo hasta la versión 1.9, lo que provocó un primer uso más lento. 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.1 el 14 de febrero de 2024) con muchas características nuevas, por ejemplo, tiempos de carga de paquetes mejorados y un nuevo analizador con mejores mensajes de error y una representación mejorada del seguimiento de pila. [57]
Julia 1.10.1 y 1.10.0 tuvieron varias regresiones, algunas con soluciones alternativas, como el trazado, [58] [59] [60] [61] y 1.10.2 se lanzó desde el 1 de marzo de 2024. 1.10.3 es Próximamente con algunas correcciones.
Desde 2014, [62] la Comunidad Julia ha organizado una Conferencia Julia anual 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 [63] y la Universidad de Maryland, Baltimore. [64] La audiencia del evento aumentó de unas pocas docenas de personas a más de 28,900 asistentes únicos [65] durante la JuliaCon 2020, que tuvo lugar virtualmente. JuliaCon 2021 también se llevó a cabo virtualmente [66] 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), [67] Jan Vitek, [68 ] Xiaoye Sherry Li y Soumith Chintala, cocreador de PyTorch . [69] JuliaCon creció a 43.000 asistentes únicos y más de 300 presentaciones (aún de libre acceso, además para los años mayores). JuliaCon 2022 también será virtual y se llevará a cabo entre el 27 y el 29 de julio de 2022, por primera vez en varios idiomas, no solo en inglés.
El idioma Julia se convirtió en un proyecto patrocinado fiscalmente por NumFOCUS en 2014 en un esfuerzo por garantizar la sostenibilidad a largo plazo del proyecto. [70] Jeremy Kepner del 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. [71] Mozilla , el fabricante 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 "Bringing Julia to the Browser", [72] es decir, Firefox y otros sitios web. navegadores. [73] [74] [75] [76] El lenguaje Julia también cuenta con el apoyo de donantes individuales en GitHub. [77]
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 . [78] [79]
En junio de 2017, Julia Computing recaudó 4,6 millones de dólares en financiación inicial de General Catalyst y Founder Collective; [80] el mismo mes la Fundación Alfred P. Sloan "otorgó 910.000 dólares para apoyar el desarrollo de Julia de código abierto , incluidos 160.000 dólares para promover la diversidad". en la comunidad de Julia", [81] y en diciembre de 2019 la empresa obtuvo una financiación de 1,1 millones de dólares del gobierno de EE. UU. 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". [82] En julio de 2021, Julia Computing anunció que recaudaron una ronda Serie A de 24 millones de dólares liderada por Dorilton Ventures, [83] 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 crean la mejor tecnología en la nube es un enfoque estratégico para Dorilton y la plataforma versátil de Julia, con capacidades revolucionarias en simulación y modelado, es enormemente relevante para nuestro negocio. Esperamos incorporar a Julia La informática en el deporte tecnológicamente más avanzado del mundo". [84] En junio de 2023, JuliaHub recibió (nuevamente, ahora con su nuevo nombre) una nueva inversión estratégica de 13 millones de dólares liderada por AE Industrial Partners HorizonX ("AEI HorizonX"). AEI HorizonX es una plataforma de inversión de capital riesgo formada en asociación con The Boeing Company , que utiliza Julia. [85] 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 , [86] aunque también fue diseñado originalmente para computación numérica/técnica. También es útil para la programación de sistemas de bajo nivel , [87] como lenguaje de especificación , [88] herramienta de síntesis de alto nivel (HLS) (para hardware, por ejemplo, FPGA ), [89] y para programación web [90] en ambos lado del servidor [91] [92] y del cliente [93] [94] .
Las principales características del idioma 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 orientados a objetos (POO) 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 es la parte superior de la jerarquía de tipos. Los tipos concretos no se pueden subtipificar como se hace en otros idiomas; en su lugar se utiliza composición (ver también herencia versus subtipificación ).
De forma predeterminada, el tiempo de ejecución de Julia debe estar preinstalado cuando se ejecuta el código fuente proporcionado por el usuario. Alternativamente, las aplicaciones Julia (GUI) se pueden agrupar rápidamente en un solo archivo con AppBundler.jl [95] para "crear aplicaciones Julia GUI en formatos modernos de instalación de aplicaciones de escritorio". Utiliza Snap para Linux, MSIX para Windows y DMG para MacOS. como objetivos. Incluye Julia completa dentro de la aplicación". [96] PackageCompiler.jl puede crear ejecutables independientes que no necesitan el código fuente de Julia para ejecutarse. [27]
En Julia, todo es un objeto, muy parecido a los lenguajes orientados a objetos; sin embargo, a diferencia de la mayoría de los lenguajes orientados a objetos, todas las funciones utilizan envío múltiple para seleccionar métodos, en lugar de envío único.
La mayoría de los paradigmas de programación se pueden implementar utilizando las macros y paquetes homoicónicos de Julia. Las macros sintácticas de Julia (utilizadas para la metaprogramación ), como las macros Lisp, son más potentes 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 macro 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 envío múltiple (que presenta una sintaxis infija de forma libre similar a ALGOL en lugar de una sintaxis tipo Lisp). sintaxis de prefijo, mientras que en Julia "todo" [97] es una expresión ), y con Fortress , otro lenguaje de programación numérico (que presenta despacho múltiple y un sofisticado sistema de tipos paramétricos). Si bien Common Lisp Object System (CLOS) agrega envío múltiple a Common Lisp, no todas las funciones son 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 despacho múltiple es tan fundamental como lo es en Julia: todas las funciones definidas por el usuario e incluso las operaciones básicas integradas +
son genéricas. Sin embargo, el sistema de tipos de Dylan no admite completamente los tipos paramétricos, que son más típicos del linaje de lenguajes ML . De forma predeterminada, CLOS no permite el envío de 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 presenta despacho múltiple en tipos paramétricos; Sin embargo, a diferencia de Julia, Fortress se escribe estáticamente en lugar de dinámicamente, con fases separadas de compilación y ejecución. Las características del idioma se resumen en la siguiente tabla:
Un ejemplo de la extensibilidad de Julia, el paquete Unitful.jl agrega soporte para unidades de medida físicas al lenguaje.
Julia tiene soporte integrado para llamar a bibliotecas de lenguaje C o Fortran usando la @ccall
macro. Bibliotecas adicionales permiten a los usuarios trabajar con Python , [98] R , [99] C++ , [100] Java , [101] y SQL . [102] [103] [104] [105]
Julia se puede compilar en ejecutables binarios con PackageCompiler.jl. [27] 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). [106]
La distribución oficial de Julia incluye un bucle interactivo de lectura, evaluación e impresión (REPL) de línea de comandos , [107] con un historial de búsqueda, finalización de pestañas y modos de shell y ayuda dedicados , [108] que se pueden utilizar para experimentar y probar código. rápidamente. [109] El siguiente fragmento representa un ejemplo de sesión de muestra donde las cadenas se concatenan automáticamente mediante println: [110]
julia > p ( x ) = 2x ^ 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 porque Julia admite una sintaxis reconocible!
El REPL brinda al usuario acceso al shell del sistema y al modo de ayuda, presionando ;
o ?
después del mensaje (antes de cada comando), respectivamente. También mantiene el historial de comandos, incluso entre sesiones. [111] El código puede probarse dentro de la sesión interactiva de Julia o guardarse en un archivo con una .jl
extensión y ejecutarse desde la línea de comandos escribiendo: [97]
$ julia <nombre de archivo>
Julia usa códigos UTF-8 y LaTeX , lo que le permite admitir símbolos matemáticos comunes para muchos operadores, como ∈ para el in
operador, que se puede escribir \in
presionando luego Tab ↹(es decir, usa códigos LaTeX , o también es posible simplemente copiar y pegar, por ejemplo, √ y ∛ posible para funciones sqrt y cbrt ). Julia es compatible con la última versión principal Unicode 15.0 (Julia 1.11-DEV admite la última versión de 15.1 puntos [112] ) [113] para los idiomas del mundo, incluso para el código fuente, por ejemplo, nombres de variables (aunque se recomienda usar inglés para código público y, por ejemplo, nombres de paquetes).
Julia cuenta con el respaldo de Jupyter , un entorno de "cuadernos" interactivos en línea, [114] y Pluto.jl, un "cuaderno reactivo" (donde los cuadernos se guardan como archivos puros de Julia), un posible reemplazo del tipo anterior. [115] Además, el sistema de publicación Quarto de Posit (anteriormente RStudio Inc) es compatible con Julia, Python, R y JavaScript observable (esos lenguajes tienen soporte oficial por parte de la compañía e incluso se pueden entretejer en el mismo documento de cuaderno, más idiomas son admitidos no oficialmente). ). [116] [117]
El REPL se puede ampliar con modos adicionales y se ha incluido con paquetes, por ejemplo, con un modo SQL , [118] para acceso a bases de datos, y RCall.jl agrega un modo R , para trabajar con el lenguaje R. [119]
En la práctica, Julia es interoperable con otros idiomas (por ejemplo, la mayoría de los 10 a 20 idiomas principales de uso popular). se utiliza para llamar a funciones de biblioteca compartida individualmente (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), por ejemplo, Python (con PythonCall.jl), R, MATLAB, C# (y otros lenguajes .NET con DotNET.jl, de ellos con JdotNET), JavaScript, Java (y otros lenguajes JVM, como Scala con JavaCall.jl). Y los paquetes para otros lenguajes permiten llamar a Julia, por ejemplo, desde Python, R, Rust , Ruby o C#. Por ejemplo, con juliacall (parte de PythonCall.jl, pyjulia es una opción diferente) para llamar desde Python y un paquete JuliaCall diferente para llamar desde R. Julia también se ha utilizado para hardware, es decir, para compilar en VHDL , como un paquete de alto nivel. herramienta de síntesis (HLS) (por ejemplo, FPGA ). [89]
Julia tiene paquetes que soportan lenguajes de marcado como HTML (y también para HTTP ), XML , JSON y BSON , y para bases de datos (como PostgreSQL, [120] Mongo, [121] Oracle, incluso para TimesTen , [122] MySQL, SQLite , Microsoft SQL Server, [121] Amazon Redshift, Vertica, ODBC) y uso web en general. [123] [124]
Julia tiene un administrador de paquetes incorporado e incluye un sistema de registro predeterminado. [125] Los paquetes se distribuyen con mayor frecuencia como código fuente alojado en GitHub , aunque también se pueden utilizar alternativas. Los paquetes también se pueden instalar como binarios, utilizando artefactos. [126] 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 localmente registros distintos del oficial. [127]
El núcleo de Julia se implementa 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. [128] Desde esa versión, el nuevo paquete puro de Julia, JuliaSyntax.jl, se utiliza para el análisis (mientras aún se puede elegir el anterior) [129], lo que mejora la velocidad y "mejora enormemente los mensajes de error del analizador en varios casos". [130] 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 está implementada en Julia.
Julia tiene compatibilidad con macOS de nivel 1 , para Apple Silicon Mac de 64 bits, de forma nativa (anteriormente, las Mac basadas en Apple M1 solo eran compatibles con la emulación Rosetta 2 [131] [132] ), y también es totalmente compatible con Mac basadas en Intel. Sin embargo, Julia 1.6 LTS no es totalmente compatible con Mac basadas en Arm (entonces se marcó como experimental), y ese soporte se actualizó primero al nivel 2 con Julia 1.8 y luego al nivel 1. Windows en ARM aún no tiene soporte oficial.
Julia tiene cuatro niveles de soporte. [133] 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 con el segundo nivel y ARMv7 (AArch32) con el tercer nivel. [134] Cientos de paquetes están acelerados por GPU : [135] CUDA (es decir, GPU de Nvidia; que implementan PTX ) tiene soporte de nivel 1, con la ayuda de un paquete externo (y versiones anteriores del paquete admiten hasta CUDA 9). También hay paquetes adicionales que admiten otros aceleradores, como las TPU de Google , [136] y algunas GPU Intel (integradas), a través de oneAPI.jl , [137] y las GPU de AMD tienen soporte, por ejemplo, con OpenCL ; y soporte experimental para la pila AMD ROCm . [138]
En algunas plataformas, es posible que sea necesario compilar Julia a partir del código fuente (por ejemplo, la Raspberry Pi original ), con opciones de compilación específicas, lo cual se ha hecho y hay disponibles archivos binarios prediseñados no oficiales (e instrucciones de compilación). [139] [140] Julia ha sido construida para varias plataformas ARM, desde la pequeña Raspberry Pis hasta la (reciente) supercomputadora top 1 Fugaku basada en ARM A64FX . [141] PowerPC (64 bits) tiene soporte de nivel 3, lo que significa que "puede compilarse o no". Julia ahora es compatible con Raspbian [142] mientras que el soporte es mejor para Pis más nuevos, por ejemplo, aquellos con Armv7 o más nuevo; El apoyo de Julia es promovido por la Fundación Raspberry Pi . [143]
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 ejecuta en él, con algunas limitaciones, es decir, en un sistema baremetal de 16 MHz y 8 bits ( ATmega328P ). ) Microcontrolador AVR Arduino con 2 KB de RAM (más 32 KB de memoria flash). [144] [145]
Julia ha sido adoptada en muchas universidades, incluidas el MIT , Stanford , UC Berkeley y la Universidad de Ciudad del Cabo . Grandes empresas privadas de muchos sectores han adoptado el lenguaje, incluidas Amazon , IBM , JP Morgan AI Research, [146] y ASML . Julia también ha sido utilizada por agencias gubernamentales como la NASA y la FAA , así como por todos los laboratorios nacionales de energía de EE. UU. [147] [148]
Julia se utiliza ampliamente para el desarrollo de fármacos en la industria farmacéutica, y ha sido adoptada por Moderna , Pfizer , AstraZeneca , Procter & Gamble y United Therapeutics . [168] [169]
Las funciones generadas por 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 retrasada del código.
Hemos demostrado que el rendimiento se acerca e incluso a veces supera el de CUDA C en una selección de aplicaciones del conjunto de pruebas Rodinia.
Ha codiseñado el lenguaje de programación Scheme, que ha influido mucho en el diseño de Julia.
Predicado para probar si Julia se está ejecutando en una máquina virtual JavaScript (JSVM), incluido, por ejemplo, un JavaScript WebAssembly incrustado en un navegador web.
Todavía sigo teniendo problemas que esto causa internamente porque fue un cambio importante que cambia las suposiciones hechas por algunos usuarios y la inferencia/codegen.
Los gastos generales para el registro de procesos de un solo subproceso generalmente son inferiores a 2 veces, con mayor frecuencia entre el 2 % y el 50 % (menor para cálculos puramente numéricos, mayor para cargas de trabajo que interactúan con el sistema operativo). Grabar múltiples subprocesos o procesos que comparten memoria (en lugar de utilizar el paso de mensajes basado en el kernel) es más difícil. [..] Como era de esperar, la prueba de subprocesos es la peor con aproximadamente un 600% de sobrecarga.
Existen algunos límites basados en el tamaño a los que se pueden asignar estructuras en pila, pero es poco probable que se excedan en la práctica.
Dado que la versión 1.7 no está muy lejos (lanzamientos programados en el futuro)
El arranque tardaba unos 80 segundos anteriormente, pero en este PR el tiempo se reduce a unos 60 segundos.
La JuliaCon de este año fue la mejor y más grande de la historia, con más de 300 presentaciones disponibles de forma gratuita en YouTube, más de 20 000 registros y más de 43 000 espectadores únicos de YouTube durante la conferencia, en comparación con 162 presentaciones, 10 000 registros y 28 900 espectadores únicos de YouTube. durante la conferencia del año pasado.
ejecutar intérpretes de idiomas en WebAssembly. Para aumentar aún más el acceso a las principales herramientas de ciencia de datos, estamos buscando 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.
Visualizamos un flujo de trabajo futuro que le permita analizar sus 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 archivo único, portátil, compartible y pirateable.
Propósito general [..] Julia le permite escribir interfaces de usuario, compilar estáticamente su código o incluso implementarlo en un servidor web.
Sistema de prevención de colisiones aéreas
Presentamos un prototipo de herramienta Julia HLS, escrita en Julia, que transforma el código de Julia a VHDL.
En resumen, aunque Julia carece de una solución de servidor multiproceso actualmente lista para usar, podemos aprovechar fácilmente sus características 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 de formato en tiempo de ejecución (a diferencia de la misma función en C).Hay disponible una lista de problemas conocidos de ARM.
Casi 300 paquetes dependen directa o indirectamente de las capacidades de GPU de Julia.
Julia trabaja en todas las variantes de Pi, recomendamos usar el Pi 3.
Casi todas las características del SDK de Python se reimplementan en Julia; para aquellas pocas que no lo están, también proporcionamos 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.
pasar 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 sin tripulación]
pudo planificar y ejecutar estas misiones de forma autónoma utilizando hardware a bordo. Fue la primera vez que el lenguaje de programación Julia se utilizó en el hardware integrado: los algoritmos se precompilaron con anticipación.
Nuevas subespecciones del Modelo 1002 para estimar el DSGE con shocks de COVID-19