julia | |
---|---|
clase de idioma | lenguaje de programación |
Apareció en | 23 de agosto de 2009 [1] [2] |
Autor | Jeff Besancon [d] , Alan Edelman [d] , Stefan Karpinski [d] y Viral Shah [d] |
Desarrollador | Jeff Besanson [d] , Stefan Karpinski [d] , Alan Edelman [d] y Viral Shah [d] |
extensión de archivo | .jl[3] |
Liberar | 1.8.2 (29.09.2022) |
sido influenciado | MATLAB |
Sitio web | julialang.org _ |
sistema operativo | Linux , Microsoft Windows [4] y macOS [4] |
Archivos multimedia en Wikimedia Commons |
Julia es un lenguaje de programación libre tipado dinámicamente de alto nivel y alto rendimiento diseñado para la computación matemática. También es efectivo para escribir programas de propósito general. [5] [6] [7] La sintaxis del lenguaje es similar a la de otros lenguajes matemáticos (como MATLAB y Octave ), pero tiene algunas diferencias significativas. Julia está escrita en C , C++ y Scheme . Tiene soporte incorporado para subprocesos múltiples y computación distribuida, que también se implementan en diseños estándar.
El lenguaje es dinámico, aunque admite la compilación JIT (se incluye como estándar un compilador JIT basado en LLVM ), por lo que, según los autores del lenguaje, las aplicaciones escritas íntegramente en el lenguaje (sin el uso de bibliotecas de bajo nivel y operaciones vectoriales) prácticamente no son inferiores en rendimiento para aplicaciones escritas en lenguajes compilados estáticamente como C o C++ [7] . La mayor parte de la biblioteca estándar del lenguaje está escrita en él [8] .
Se admite la sobrecarga de funciones y operadores (que en realidad también son funciones), y opcionalmente puede especificar un tipo para los argumentos de la función, lo que generalmente no es el caso en los lenguajes de escritura dinámica. Esto le permite crear variantes especializadas de funciones y operadores para acelerar los cálculos. La variante más adecuada de la función se selecciona automáticamente durante la ejecución. La sobrecarga de operadores también le permite crear nuevos tipos de datos que se comportan como tipos integrados.
Las discusiones sobre la necesidad de crear un nuevo lenguaje comenzaron en agosto de 2009. Stefan Karpinski, que para ese entonces ya había trabajado con el paquete matemático Matlab y el lenguaje de programación R , no estaba satisfecho con sus limitaciones. Y después de que Viral Shah le presentó a Jeff Besançon, los tres comenzaron a discutir el concepto de un nuevo idioma. Para la elección de un nombre femenino como nombre del idioma, como explicó el desarrollador principal del idioma Stefan Karpinski en una entrevista, "no hubo ninguna razón especial", a los desarrolladores simplemente "les gustó este nombre" [7] . La primera versión abierta se publicó en febrero de 2012. [9] [10]
La tarea principal durante la creación fue desarrollar un lenguaje universal que pueda trabajar con una gran cantidad de cálculos y al mismo tiempo garantizar el máximo rendimiento. Dado que una gran cantidad de cómputo se realiza en entornos de nube, el lenguaje inmediatamente implementó soporte para nubes y programación paralela como reemplazo del mecanismo MPI [7] .
Inicialmente, el lenguaje implementó un modelo para construir grandes aplicaciones paralelas basadas en un espacio de direcciones distribuido globalmente. Dicho modelo implica la capacidad de realizar operaciones (incluida su transferencia entre máquinas) con referencia a un objeto ubicado en otra máquina que también participa en los cálculos. Este mecanismo le permite realizar un seguimiento de qué cálculos se realizan en qué sistemas, así como conectar nuevas máquinas a los cálculos [7] .
Según el sitio web oficial, las principales características del lenguaje son:
Ejemplo de función:
funcion mandel ( z ) c = z máximo = 80 para n = 1 : maxiter si abs ( z ) > 2 volver n - 1 final z = z ^ 2 + c final maxiter de retorno final función randmatstat ( t ) norte = 5 v = ceros ( t ) w = ceros ( t ) para i = 1 : t a = randn ( norte , norte ) b = randn ( norte , norte ) c = randn ( norte , norte ) d = randn ( norte , norte ) PAG = [ un segundo c re ] Q = [ un segundo ; c re] v [ i ] = rastro (( P . '* P ) ^ 4 ) w [ i ] = rastro (( Q . '* Q ) ^ 4 ) final estándar ( v ) / media ( v ), estándar ( w ) / media ( w ) finalUn ejemplo de cómputo paralelo 100.000.000 resultados de un lanzamiento de moneda al azar:
nheads = @ paralelo ( + ) para i = 1 : 100000000 azar () finalEn diciembre de 2011, Stefan Boyer propuso la idea de una implementación gráfica del lenguaje, que facilitaría el trabajo con él a matemáticos y otros científicos que no tienen conocimientos de programación y trabajan en entornos Unix . La idea de Boyer era pasar de enviar comandos a un clúster informático a simplemente trabajar con un navegador. Al mismo tiempo, la parte del cliente, que implementa, entre otras cosas, una interfaz gráfica y una plataforma para trazar gráficos, puede implementarse utilizando tecnologías tan modernas (en ese momento) como HTML5 , SVG y AJAX [11] .
Para implementar su idea, Boyer usó una parte del servidor escrita en lenguaje Julia, que, usando un administrador de sesión especial del protocolo SCGI , interactúa con un servidor web basado en lighttpd . Tal enfoque hizo posible implementar el concepto REPL de una manera bastante simple , que tiene las siguientes capacidades: trazado basado en el cálculo de funciones, matrices unidimensionales y conjuntos de puntos de cualquier tipo numérico; conveniencia de trabajar con el entorno (detección automática del tamaño de las ventanas, etc.); extensibilidad y multiplataforma entre navegadores. Las funciones para trazar en dicho entorno se pueden especificar de varias maneras:
trama ( pecado , - pi , pi )o
trama ([ 0.0 , 0.1 , 0.4 , 0.3 , 0.4 ])[11] .
Julia Studio es el primer entorno de desarrollo integrado de escritorio para Julia [12] , posteriormente reemplazado por el entorno Juno [13] , que es un complemento para el editor de texto Atom .
Sistemas de álgebra computacional | |
---|---|
Propiedad |
|
Libre | |
Gratis/shareware |
|
No soportado |
|
Lenguajes de programación | |
---|---|
|