ulia es un lenguaje dinÔmico de alto nivel y alto rendimiento para computación técnica.
Hace pocos dĆas se dio a conocer el lanzamiento de la nueva versión del lenguaje de programación Julia 1.9, que combina cualidades como alto rendimiento, soporte para escritura dinĆ”mica y herramientas integradas para programación paralela. La sintaxis de Julia es cercana a MATLAB, con algunos elementos tomados de Ruby y Lisp.
Julia se destaca por ser un lenguaje de programación multiplataforma y multiparadigma de tipado dinĆ”mico de alto nivel y alto desempeƱo para la computación genĆ©rica, tĆ©cnica y cientĆfica, con una sintaxis similar a la de otros entornos de computación similares.
Principales novedades deĀ Julia 1.9
En esta nueva versión que se presenta de Julia 1.9 se destacan diversas mejoras en el tiempo de ejecución/compilador, ya queĀ hubo una reducción significativa del tiempo hasta la primera ejecución.Ā La compilación previa del paquete ahora guarda el código nativo en Ā«pkgimageĀ», lo que significa que el código generado durante la compilación previa no necesitarĆ” volver a compilarse despuĆ©s de cargar el paquete. El uso del modo pkgimages se puede deshabilitar con la opción Ā«āpkgimages=noĀ».
Otro de los cambios que se destaca, son las llamadas con argumentos no especĆficos del tipo ahora se pueden optimizar mediante división de unión para inyección o resolución estĆ”tica, incluso si hay varios tipos diferentes de candidatos de envĆo. Esto puede mejorar el rendimiento en determinadas situaciones en las que los tipos de objetos no se resuelven completamente de forma estĆ”tica, al resolver de forma estĆ”tica los sitios de llamadas Ā«@nospecialize-dĀ» y evitar la recompilación.
Los literales de un solo carÔcter ahora admiten la misma sintaxis que los literales de cadena; aquellos la sintaxis puede representar secuencias UTF-8 no vÔlidas, según lo permita el tipo Char.
Ademas de ello, en Linux y Windows, la opción Ā«āthreads=autoĀ» ahora intenta determinar la cantidad disponible de procesadores en función de la afinidad de la CPU, que es una mĆ”scara que normalmente se establece en entornos HPC y en la nube.
Se ha deshabilitado la opción Ā«āmath-mode=fastĀ«, en lugar de la cual se recomienda utilizar la macro Ā«@fastmathĀ«, que tiene una semĆ”ntica bien definida, ademas de que el parĆ”metro Ā«āthreadsĀ» ahora tiene el formato Ā«auto | N[,auto|M]Ā», donde M especifica la cantidad de subprocesos interactivos que se crearĆ”n.
Se agregó la opción Ā«āheap-size-hint=<size>Ā» para establecer el umbral despuĆ©s del cual comienza la recolección activa de elementos no utilizados. El tamaƱo se puede especificar en bytes, kilobytes (1000 KB), megabytes (300 MB) o gigabytes (1,5 GB).
La macro Ā«@invokeĀ» introducida en la versión 1.7 ahora se exporta y estĆ” disponible para su uso. AdemĆ”s, ahora usa el mĆ©todo Ā«Core.Typeof(x)Ā» en lugar de Ā«AnyĀ» cuando se omite la anotación de tipo para el argumento Ā«xĀ». Esto es necesario para que los tipos pasados āācomo argumentos se procesen correctamente.
Por otra parte, «Threads.@spawn» ahora tiene un primer argumento opcional de «:default» o «:interactive». Una tarea interactiva requiere una respuesta de latencia baja y estÔ diseñada para ser breve o realizarse con frecuencia. Las tareas interactivas se ejecutarÔn en subprocesos interactivos si se especifican al iniciar Julia.
De los demƔs cambios que se destacan:
- Negar la función de predicado Ā«!fĀ» ahora devuelve una función compuesta Ā«(!) ā fĀ» en lugar de una función anónima.
- Las funciones de división de dimensión ahora funcionan en mĆŗltiples dimensiones: Ā«eachsliceĀ», Ā«eachrowĀ» y Ā«eachcolĀ» devuelven un objeto Ā«SlicesĀ» que permite el envĆo para proporcionar mĆ©todos mĆ”s eficientes.
- La macro Ā«@kwdefĀ» se ha agregado a la API pĆŗblica.
- Se solucionó un problema con el orden de las operaciones en «fld1».
- La clasificación ahora siempre es estable en el tiempo (QuickSort rediseñado).
- La cantidad predeterminada de subprocesos BLAS ahora es igual a la cantidad de subprocesos de CPU en la arquitectura ARM y la mitad de la cantidad de subprocesos de CPU en otras arquitecturas.
- Printf: Mensajes de error reelaborados para cadenas mal formadas para una mejor legibilidad.
- Perfil: nueva función «Profile.take_heap_snapshot(file)» que escribe un archivo en formato «.heapsnapshot» basado en JSON compatible con Chrome.
- Se agregó soporte para la especificación Unicode 15.
- Las combinaciones anidadas de tuplas y tuplas de caracteres con nombre ahora se pueden usar como parƔmetros de tipo.
Finalmente si estƔs interesado en poder conocer mƔs al respecto, puedes consultar los detalles en el siguiente enlace.