Paradigma | Multi-paradigma : envío múltiple (paradigma primario), procedimental , funcional , meta , multietapa [1] |
---|---|
Diseñada por | Jeff Bezanson , Alan Edelman , Stefan Karpinski , Viral B. Shah |
Desarrollador | Jeff Bezanson , Stefan Karpinski , Viral B. Shah y otros colaboradores [2] [3] |
Apareció por primera vez | 2012 [4] |
Lanzamiento estable | 1.6.2 [5] / 14 de julio de 2021 |
Versión de vista previa | |
Disciplina de mecanografía | Dinámico , [11] fuerte , [12] nominativo , paramétrico , opcional |
Lenguaje de implementación | Julia, C , C ++ , esquema , LLVM [13] |
Plataforma | Nivel 1: x86-64 , IA-32 , GPU CUDA / Nvidia Nivel 2: ARM de 64 bits , Windows de 32 bits (64 bits es el nivel 1) Nivel 3: ARM de 32 bits , PowerPC , GPU AMD. También es compatible con las GPU de oneAPI / Intel y las TPU de Google , [14] y tiene compatibilidad con el navegador web (para JavaScript y WebAssembly ) , [15] y puede funcionar en Android . Para obtener más detalles, consulte "plataformas compatibles" . |
SO | Linux , macOS , Windows y FreeBSD |
Licencia | MIT (núcleo), [2] GPL v2 ; [13] [16] una opción de archivo MAKE omite las bibliotecas GPL [17] |
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 alto rendimiento . Si bien es un lenguaje de uso general y se puede usar para escribir cualquier aplicación, muchas de sus características son adecuadas para el análisis numérico y la ciencia computacional . [23] [24] [25] [26]
Los aspectos distintivos del diseño de Julia incluyen un sistema de tipos con polimorfismo paramétrico en un lenguaje de programación dinámico ; con el envío múltiple como su paradigma de programación central . Julia apoya concurrente , (componibles) paralelo y Distributed Computing (con o sin el uso de MPI [27] o la incorporada en el correspondiente [ aclaración necesaria ] [28] a " OpenMP al estilo de" hilos [29] ), y llamada directa de C y bibliotecas de Fortran sincódigo de pegamento . Julia usa un compilador justo a tiempo (JIT) al que se hace referencia como " justo a tiempo " (JAOT) en la comunidad de Julia, ya que Julia compila todo el código (por defecto) en código de máquina antes de ejecutarlo. [30] [31]
Julia recolecta basura , [32] utiliza una evaluación ávida e incluye bibliotecas eficientes para cálculos de punto flotante , álgebra lineal , generación de números aleatorios y comparación de expresiones regulares . Hay muchas bibliotecas disponibles, incluidas algunas (por ejemplo, para transformaciones rápidas de Fourier ) que anteriormente se incluían con Julia y ahora están separadas. [33]
Varias herramientas de desarrollo admiten la codificación en Julia, como los entornos de desarrollo integrados (por ejemplo, Visual Studio Code de Microsoft , con extensiones disponibles que agregan compatibilidad con Julia a los IDE, por ejemplo, proporcionando soporte para depuración y linting [34] ); con herramientas integradas, por ejemplo, un perfilador (y soporte de gráfico de llama disponible [35] [36] para el integrado), depurador, [37] y el paquete Rebugger.jl "admite depuración de ejecución repetida " [a] y más . [39]
El trabajo en Julia se inició en 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 con una publicación de blog que explica la misión del idioma. [40] 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". [25] Bezanson dijo que eligió el nombre por recomendación de un amigo, [41] luego, años después, escribió:
¿Quizás julia significa “el ceceo poco común de Jeff es automático”? [42]
Desde el lanzamiento de 2012, la comunidad de Julia ha crecido y, a partir de 2020, "Julia ha sido descargada por usuarios en más de 10,000 empresas y se utiliza en más de 1,500 universidades" [43] con más de 29 millones de descargas en julio de 2021 [actualizar], hasta en un 87% en un año (otras estadísticas relacionadas con Julia aumentaron hasta en un 113%), [44] y el ecosistema de paquetes de Julia tiene más de 11,8 millones de líneas de código (incluidos documentos y pruebas). [45] La conferencia académica JuliaCon para usuarios y desarrolladores de Julia se ha celebrado anualmente desde 2014 con JuliaCon2020 dando la bienvenida a más de 28,900 espectadores únicos, [46]y luego JuliaCon2021 rompiendo todos los récords anteriores (con más de 300 presentaciones de JuliaCon2021 disponibles de forma gratuita en YouTube, frente a las 162 del año anterior) y 43.000 espectadores únicos durante la conferencia. [47]
La versión 0.3 se publicó en agosto de 2014, la versión 0.6 en junio de 2017. [48] Tanto Julia 0.7 [49] como la versión 1.0 se lanzaron el 8 de agosto de 2018. El trabajo en Julia 0.7 fue una "gran empresa" (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 ; [50] y la sintaxis cambió un poco (con la sintaxis ahora estable, y lo mismo para 1.xy 0.7).
La versión candidata para Julia 1.0 (Julia 1.0.0-rc1) se publicó el 7 de agosto de 2018 y la versión final un día después. Julia 1.0.x es la versión más antigua que aún se admite, y tiene soporte a largo plazo (LTS); de lo contrario, solo se admite la última versión, en cada momento. Julia 1.1 se lanzó en enero de 2019 con, por ejemplo, una nueva función de idioma de "pila de excepciones". Se esperaban lanzamientos de corrección de errores aproximadamente mensualmente, para 1.4.xy 1.0.xy Julia 1.0.1 hasta 1.0.5 siguieron ese programa. Julia 1.2 se lanzó en agosto de 2019 y, por ejemplo, tiene soporte integrado para navegadores web (para probar si se ejecuta en JavaScript VM). [51] Julia 1.3 agregó, por ejemplo, un paralelismo de subprocesos múltiples componible y un sistema de artefactos binarios para los paquetes de Julia. [52]
Julia 1.4 permitió una mejor sintaxis para la indexación de matrices para manejar, por ejemplo , matrices basadas en 0 , con A[begin+1]
para el segundo elemento de la matriz A. [53] También se cambió el modelo de memoria. [54] Versión menor 1.4.2 solucionada, por ejemplo, un problema de Zlib , duplicando la velocidad de descompresión. [55]
Julia 1.5 lanzada en agosto de 2020 agregó soporte de depuración de grabación y reproducción , [56] para la herramienta rr de Mozilla . Es una gran versión, con un comportamiento modificado en el REPL (alcance flexible), el mismo que se usa en Jupyter , pero totalmente compatible con el 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", [57] reduciendo las asignaciones de montón, p. Ej.views
ya no están asignando. Todas las versiones han trabajado en el rendimiento, pero especialmente el trabajo en Julia 1.5 se centró en el rendimiento del llamado "tiempo hasta el primer gráfico", en general, la velocidad de compilación en sí (en contraposición al rendimiento del código generado), y agrega herramientas. para que los desarrolladores mejoren la carga de paquetes. [58] Julia 1.6 también mejora aún más ese rendimiento.
Los paquetes que funcionan en Julia 1.0.x deberían funcionar en 1.1.xo más reciente, habilitado por la garantía de sintaxis compatible con versiones posteriores . Una excepción notable fueron las bibliotecas de interfaz de idiomas extranjeros como JavaCall.jl (para lenguajes JVM como Java o Scala ) y Rcall.jl ( lenguaje R ) debido a algunos cambios relacionados con subprocesos (en un momento en que todas las funciones de subprocesos en Julia estaban marcado experimental). [59] El problema fue especialmente complicado para la JVM de Java, ya que tiene algunas expectativas especiales sobre cómo se usa el espacio de direcciones de la pila . Se JULIA_ALWAYS_COPY_STACKS
publicó una solución alternativa para Julia 1.3.0, mientras que una solución completa para Java está pendiente y no tiene una fecha de vencimiento establecida. [60]Además, las versiones de JVM desde Java 11 no presentan este problema. [61]
Julia 1.6 fue la versión más grande desde 1.0, más rápida en muchos frentes, por ejemplo, introdujo la precompilación paralela y la carga más rápida de paquetes, en algunos casos "50 veces más rápido en los tiempos de carga para grandes árboles de artefactos binarios", [62] y es probable que se convierta en el próxima versión de soporte a largo plazo (LTS) de Julia. El hito de 2.0 actualmente no tiene una fecha de vencimiento establecida. [63]
Julia 1.6.2 se lanzó el 14 de julio de 2021, y Julia 1.7, 1.8, 1.9 y 1.10 son los siguientes hitos, con 1.7 pospuesto hasta el 1 de junio de 2021 [64] (es decir, desde entonces 1.7 está en función de congelación ) y a partir de la versión 1.7 El desarrollo de Julia ha vuelto a las versiones basadas en el tiempo . [sesenta y cinco]
Julia ha atraído a algunos usuarios de alto perfil, desde el administrador de inversiones BlackRock , que lo usa para análisis de series de tiempo , hasta la aseguradora británica Aviva , que lo usa para cálculos de riesgo . En 2015, el Banco de la Reserva Federal de Nueva York usó a Julia para hacer modelos de la economía de los Estados Unidos, y señaló que el lenguaje hizo la estimación del modelo "aproximadamente 10 veces más rápido" que su implementación anterior de MATLAB . Los cofundadores de Julia establecieron Julia Computing en 2015 para brindar servicios de asistencia, capacitación y consultoría pagados a los clientes, aunque Julia sigue siendo de uso gratuito. En la conferencia de la JuliaCon de 2017 [66] , Jeffrey Regier, Keno Fischery otros anunciaron [67] que el proyecto Celeste [68] utilizó a Julia para lograr "un rendimiento máximo de 1,54 petaFLOPS utilizando 1,3 millones de hilos" [69] en 9300 nodos Knights Landing (KNL) de la supercomputadora Cori II (Cray XC40) (entonces Sexto ordenador más rápido del mundo). [70] Julia se une así a C, C ++ y Fortran como lenguajes de alto nivel en los que se han logrado cálculos petaFLOPS.
Tres de los cocreadores de Julia son los ganadores del 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 permitan el análisis y solución de problemas de ciencias computacionales ". [71] 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 ciencia computacional y por sus contribuciones a la Julia lenguaje de programación." [72]
En 2019, Julia Computing anunció "la disponibilidad del lenguaje de programación Julia como un contenedor preempaquetado en el registro de contenedores NVIDIA GPU Cloud (NGC)" [73] y una publicación de blog en el sitio de Nvidia dice "Implemente fácilmente Julia en x86 y Arm [..] Julia ofrece un paquete para un ecosistema HPC completo que cubre el aprendizaje automático, la ciencia de datos, varios dominios científicos y la visualización ". [74]
Además, "Julia fue seleccionada por Climate Modeling Alliance como el único lenguaje de implementación para su modelo climático global de próxima generación. Este proyecto multimillonario tiene como objetivo construir un modelo climático a escala terrestre que brinde información sobre los efectos y desafíos del cambio climático. " [73]
Julia es utilizada por la NASA , por ejemplo, para modelar la dinámica de separación de naves espaciales (15.000 veces más rápido que antes con Simulink / MATLAB [75] ) [76] [77] [78] y el INPE brasileño para la planificación de misiones espaciales y simulación de satélites . [79] Otro esfuerzo está trabajando en un proyecto integrado para controlar un satélite en el espacio usando Julia para el control de actitud . [ cita requerida ]
Desde 2014, [80] la Comunidad de Julia ha sido sede de una Conferencia de Julia anual centrada en desarrolladores y usuarios. La primera JuliaCon tuvo lugar en Chicago y puso en marcha la celebración anual de la conferencia. Desde 2014, la conferencia se ha celebrado en varios lugares, incluido el MIT [81] y la Universidad de Maryland, Baltimore. [82] La audiencia del evento ha crecido de unas pocas docenas de personas a más de 28,900 asistentes únicos [83] durante la JuliaCon 2020, que tuvo lugar virtualmente. La JuliaCon 2021 se llevará a cabo virtualmente entre el 28 y el 30 de julio de 2021 [84] con discursos de apertura de Jan Vitek, [85] Xiaoye Sherry Li y Soumith Chintala. [86]
La comunidad de Julia [87] tiene presencia en múltiples plataformas: Twitter, [88] LinkedIn, [89] Facebook, [90] Slack, [91] Zulip, [92] Discord, [93] Discourse, [94] Stack Overflow , [95] YouTube, [96] y más. [97] Desde mayo de 2017, Julia Language ha empleado a un administrador de la comunidad; primero Alex Arsland [98] que sirvió hasta finales de 2019 y actualmente Logan Kilpatrick. [99]
El lenguaje de Julia se convirtió en un proyecto patrocinado por NumFOCUS Fiscalmente en 2014 en un esfuerzo por garantizar la sostenibilidad del proyecto a largo plazo. [100] El Dr. Jeremy Kepner del MIT Lincoln Laboratory 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. [101] Mozilla, el fabricante del navegador web Firefox, con sus becas 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", [102] es decir, para Firefox y otros navegadores web. [103] [104] [105] [106] El lenguaje Julia también es apoyado por donantes individuales en GitHub. [107]
Julia Computing, Inc. fue fundada en 2015 por Viral B. Shah, Deepak Vinchhi, Alan Edelman, Jeff Bezanson, Stefan Karpinski y Keno Fischer . [108]
En junio de 2017, Julia Computing recaudó US $ 4,6 millones en fondos iniciales de General Catalyst y Founder Collective , [109] el mismo mes "la Fundación Alfred P. Sloan le otorgó $ 910,000 para apoyar el desarrollo de Julia de código abierto, incluidos $ 160,000 para promover la diversidad en la comunidad de Julia ", [110] 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 edificios ". [111] En julio de 2021, Julia Computing anunció que recaudó $ 24 millonesUna serie dirigida por Dorilton Ventures, [112] , que también es propietaria de Fórmula 1 del equipo 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 versátil plataforma de Julia, con capacidades revolucionarias en simulación y modelado, es sumamente relevante para nuestro negocio. Esperamos incorporar a Julia La informática en el deporte más avanzado tecnológicamente del mundo ”. [113]
Julia es un lenguaje de programación de propósito general , [114] aunque originalmente también fue diseñado para computación numérica / técnica. También es útil para la programación de sistemas de bajo nivel , [115] como lenguaje de especificación , [116] y para la programación web [117] tanto en el lado del servidor [118] [119] como en el del cliente [120] [15] .
Según el sitio web oficial, las principales características del idioma son:
El envío múltiple (también denominado métodos múltiples en Lisp) es una generalización del envío único , el mecanismo polimórfico utilizado en los lenguajes comunes de programación orientada a objetos (OOP), que utiliza la herencia . En Julia, todos los tipos concretos son subtipos de tipos abstractos, subtipos directa o indirectamente del Any
tipo, que es la parte superior de la jerarquía de tipos. Los tipos concretos no pueden subtipificarse en sí mismos como en otros idiomas; en su lugar, se usa composición (ver también herencia vs subtipificación ).
De forma predeterminada, el tiempo de ejecución de Julia debe estar preinstalado a medida que se ejecuta el código fuente proporcionado por el usuario. Alternativamente, un ejecutable independiente que no necesita código fuente de Julia se puede construir con PackageCompiler.jl . [124]
Las macros sintácticas de Julia (utilizadas para la metaprogramación ), como las macros 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 al 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 significativamente en varios dialectos de Lisp, incluidos Scheme y Common Lisp , y comparte muchas características con Dylan , también un lenguaje dinámico orientado a múltiples despachos (que presenta una sintaxis infija de forma libre similar a ALGOL en lugar de Lisp) como sintaxis de prefijo, mientras que en Julia "todo" [125] es una expresión ), y con Fortress , otro lenguaje de programación numérico (que cuenta con envío múltiple y un sofisticado sistema de tipos paramétricos). Si bien Common Lisp Object System (CLOS) agrega múltiples despachos a Common Lisp, no todas las funciones son funciones genéricas.
En Julia, Dylan y Fortress, la extensibilidad es la 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. El sistema de tipos de Dylan, sin embargo, no es totalmente compatible con los tipos paramétricos, que son más típicos del linaje de lenguajes ML . Por defecto, CLOS no permite el envío de tipos paramétricos de Common Lisp; dicha semántica de despacho extendida solo se puede agregar como una extensión a través del Protocolo de metaobjetos CLOS. Por su diseño convergente, Fortress también presenta múltiples despachos en tipos paramétricos; Sin embargo, a diferencia de Julia, Fortress se escribe estáticamente en lugar de dinámicamente, con fases de compilación y ejecución separadas. Las características del idioma se resumen en la siguiente tabla:
Idioma | Tipo de sistema | Funciones genéricas | Tipos paramétricos |
---|---|---|---|
Julia | Dinámica | Defecto | sí |
Lisp común | Dinámica | Optar en | Sí (pero no envío) |
Dylan | Dinámica | Defecto | Parcial (sin envío) |
Fortaleza | Estático | Defecto | sí |
La distribución oficial de Julia incluye un bucle interactivo de lectura-evaluación-impresión de línea de comandos (REPL), [126] con un historial de búsqueda, finalización de tabulación y modos de ayuda y shell dedicados , [127] que se pueden utilizar para experimentar y probar código. rápidamente. [128] El siguiente fragmento representa un ejemplo de sesión de muestra donde las cadenas se concatenan automáticamente por println: [129]
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 sintaxis reconocible!" ) Hola ¡mundo! ¡Estoy en la nube 9 ya que 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 indicador (que precede a cada comando), respectivamente. También mantiene el historial de comandos, incluso entre sesiones. [130] Código que puede probarse dentro de la sección interactiva de Julia o guardarse en un archivo con una .jl
extensión y ejecutarse desde la línea de comandos escribiendo: [125]
$ julia <nombre de archivo>
Julia es compatible con Jupyter , un entorno de "cuadernos" interactivos en línea, [131] y Pluto.jl , un " cuaderno reactivo " (donde los cuadernos se guardan como archivos de Julia puros), un posible reemplazo del tipo anterior. [132]
En la práctica, Julia es interoperable con muchos idiomas (por ejemplo, la mayoría de los 10-20 idiomas principales de uso popular). La ccall
palabra clave de Julia se usa para llamar a funciones de biblioteca compartida C-exported o Fortran individualmente, y paquetes para permitir llamar a otros lenguajes, por ejemplo, Python, R, MATLAB, Java o Scala. [133] Y paquetes para otros lenguajes, por ejemplo, Python (o R o Ruby), es decir, pyjulia, para llamar a Julia.
Julia tiene soporte para el último Unicode 13.0, [134] con UTF-8 usado para cadenas (por defecto) y para el código fuente de Julia (solo permite UTF-8 legal en la última versión), lo que significa que también permite como opción símbolos matemáticos comunes para muchos operadores, como ∈ para el in
operador.
Julia tiene paquetes que admiten lenguajes de marcado como HTML (y también para HTTP ), XML , JSON y BSON , y para bases de datos y uso web en general.
Julia tiene un administrador de paquetes integrado e incluye un sistema de registro predeterminado. [135] 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. [136] El administrador de paquetes de Julia se usa 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. [137]
El núcleo de Julia está implementado en Julia y C , junto con C ++ para la dependencia LLVM . El análisis sintáctico y la reducción de código se implementan en FemtoLisp, un dialecto de Scheme . [138] El proyecto de infraestructura del compilador LLVM se utiliza como back-end para la generación de código de máquina optimizado de 64 o 32 bits , según la plataforma en la que se ejecute Julia. Con algunas excepciones (p. Ej., PCRE ), la biblioteca estándarse implementa en Julia. El aspecto más notable de la implementación de Julia es su velocidad, que a menudo está dentro de un factor de dos en relación con el código C totalmente optimizado (y, por lo tanto, a menudo un orden de magnitud más rápido que Python o R ). [139] [140] [141] El desarrollo de Julia comenzó en 2009 y una versión de código abierto se publicó en febrero de 2012. [4] [142]
Si bien Julia tiene soporte macOS de nivel 1 , es decir, para Mac basadas en Intel, las nuevas Mac basadas en Apple M1 solo tienen soporte experimental, con soporte completo trabajado, todavía no es una plataforma compatible de nivel 1 (tampoco lo es Windows en ARM ). [143] Sin embargo, se afirma que Julia funciona [144] "bien" en Macs M1 (con un rendimiento reducido) mediante el uso (automático) de Rosetta 2 (que necesita emular a Julia). El trabajo en el soporte nativo de M1 de velocidad completa (es decir, sin emulación) se realiza principalmente, y muchos programas pueden funcionar si se usa una compilación de Julia, ya que todas las pruebas de Julia menos una pasan (excepto "Demasiados archivos abiertos").
Dado que Julia usa JIT, Julia genera código de máquina nativo directamente, antes de que se ejecute una función por primera vez (es decir, un enfoque diferente a la compilación del código de bytes , que usted distribuye de forma predeterminada, para ejecutarse en una máquina virtual (VM), como por ejemplo, Java / JVM ; luego se traduce del código de bytes mientras se ejecuta, como lo hizo Dalvik en versiones anteriores de Android).
Julia tiene cuatro niveles de apoyo. [145] Todos los procesadores IA-32 que implementan completamente la subarquitectura i686 son compatibles y x86-64 de 64 bits (también conocido como amd64 ), es decir, todos los que tienen menos de una década son compatibles. Los procesadores ARMv8 ( AArch64 ) son compatibles en el segundo nivel, y ARMv7 y ARMv6 (AArch32) son compatibles con algunas advertencias (nivel inferior) para Julia 1.0.xy también tenían ejecutables oficiales para versiones posteriores, mientras que la compatibilidad con ARM de 32 bits se degradó posteriormente. al nivel 3 (sin embargo, hay binarios no oficiales disponibles para Julia 1.5.1 [146] ). [147] CUDA (es decir, GPU de Nvidia; implementación de PTX) tiene soporte de nivel 1, con la ayuda de un paquete externo. También hay paquetes que admiten otros aceleradores, como las TPU de Google , [148] y algunas GPU de Intel (integradas), a través de oneAPI.jl , [149] y las GPU de AMD son compatibles, por ejemplo, con OpenCL ; y soporte experimental para la pila AMD ROCm . [150] La página de descargas de Julia proporciona ejecutables (y fuente) para todas las plataformas oficialmente soportadas.
En algunas plataformas, es posible que Julia deba compilarse 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 binarios preconstruidos no oficiales (e instrucciones de compilación). [151] [152] Julia se ha construido sobre varias plataformas ARM. PowerPC (64 bits) tiene soporte de nivel 3, lo que significa que "puede compilarse o no". Julia ahora es compatible con Raspbian [153] mientras que el soporte es mejor para los nuevos Pis, por ejemplo, aquellos con ARMv7 o más nuevos; el soporte de Julia es promovido por la Fundación Raspberry Pi . [154]
También hay soporte para navegadores web / JavaScript a través de JSExpr.jl; [120] y el lenguaje alternativo de los navegadores web, WebAssembly , tiene un soporte mínimo [15] para varios proyectos externos futuros de Julia. Julia puede compilar en ARM; por lo tanto, en teoría, las aplicaciones de Android se pueden crear con el NDK , pero por ahora Julia se ha hecho para que se ejecute en Android solo de forma indirecta, es decir , con un chroot de Ubuntu en Android. [155]
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.
La biblioteca Base de Julia, escrita en gran parte en la propia Julia, también integra las mejores bibliotecas C y Fortran de código abierto maduras y mejores para ...
Tenga en cuenta que esta confirmación no elimina las utilidades GPL como git y busybox que se incluyen en los instaladores binarios de Julia en Mac y Windows.
Permite construir desde el código fuente sin dependencias de la biblioteca GPL.
Ha codiseñado el lenguaje de programación Scheme, que ha influido mucho en el diseño de Julia.
using FFTW
Predicado para probar si Julia se está ejecutando en una máquina virtual de JavaScript (JSVM), incluida, por ejemplo, una incrustación de JavaScript de WebAssembly en un navegador web.
Sigo teniendo problemas que esto causa internamente porque fue un cambio importante que cambia las suposiciones hechas por algunos usuarios y la inferencia / codegen.
La sobrecarga para el registro de procesos de un solo subproceso es generalmente inferior a 2x, con mayor frecuencia entre 2% y 50% (menor para cálculos puramente numéricos, mayor para cargas de trabajo que interactúan con el sistema operativo). La grabación de múltiples subprocesos o procesos que comparten memoria (a diferencia de usar el paso de mensajes basado en el kernel) es más difícil. [..] Como era de esperar, la prueba de subprocesos es la peor infractora con un 600% de sobrecarga.
Existen algunos límites basados en el tamaño a los que se pueden asignar las estructuras en pila, pero es poco probable que se excedan en la práctica.Mantenimiento de CS1: utiliza el parámetro de autores ( enlace )
JeffBezanson modificó los hitos: 1.3, 1.4
Dado que 1.7 no está demasiado lejos (lanzamientos programados en el futuro)
Celeste está escrito íntegramente en Julia, y el equipo de Celeste cargó un total de 178 terabytes de datos de imágenes para producir el catálogo más preciso de 188 millones
de objetos astronómicos
en solo 14,6 minutos [..] una mejora de rendimiento de 1000x en ejecución de un solo subproceso .
@KenoFischer está hablando sobre Celeste en el teatro @Intel en @Supercomputing.
0,65 millones de núcleos, 56 TB de datos, Cori: la sexta supercomputadora más grande del mundo.
Programa de servicios de lanzamiento de la NASA que vio una aceleración de 15,000x al pasar de Simulink a ModelingToolkit.jl
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 transfiera 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 clases entre R / Julia y Javascript.
Imaginamos un flujo de trabajo futuro que le permita hacer su intercambio 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 que dentro de un archivo único, portátil, que se puede compartir y que se puede piratear.
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 aerotransportadas
En resumen, aunque Julia carece de una solución de servidor de subprocesos múltiples 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 el uso completo de la CPU para el manejo de HTTP.
para importar módulos (por ejemplo, python3-numpy)
puede instalar el paquete de Julia OhMyREPL.jl (
github
.com
/ KristofferC
/ OhMyREPL
.jl
) que le permite personalizar la apariencia y el comportamiento de REPL
string(greet, ", ", whom, ".\n")
ejemplo para conocer 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 formateo en tiempo de ejecución (a diferencia de la misma función en C).Hay disponible una lista de
problemas conocidos
de ARM.
Julia trabaja en todas las variantes de Pi, recomendamos usar Pi 3.
Wikilibros tiene un libro sobre el tema: Presentación de Julia |