Julia, el lenguaje de programación multiplataforma llega a su versión 1.9

Julia lang

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.