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

Hace unos días se ha dado a conocer el lanzamiento de la nueva versión del lenguaje de programación Julia, la 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 (1.9)

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=» 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.

Para finalizar, comentar que el núcleo de la implementación está licenciado bajo la licencia MIT. Varias librerías usadas por el entorno de Julia incluyen sus propias licencias tales como la GPL, LGPL y BSD (de tal manera que el entorno, el cual consiste en el lenguaje, las interfaces de usuario y las librerías, está bajo la GPL). El lenguaje puede ser compilado como una librería compartida, para que los usuarios puedan combinar Julia con su propio código en C/Fortran o con librerías propietarias de terceros.

Fuentes: DesdeLinux y Wikipedia.