{"id":1044,"date":"2023-05-31T23:25:03","date_gmt":"2023-05-31T21:25:03","guid":{"rendered":"https:\/\/www.glub.biz\/?p=1044"},"modified":"2023-05-29T20:02:35","modified_gmt":"2023-05-29T18:02:35","slug":"julia-el-lenguaje-de-programacion-multiplataforma-llega-a-su-version-1-9","status":"publish","type":"post","link":"https:\/\/www.glub.biz\/?p=1044","title":{"rendered":"Julia, el lenguaje de programaci\u00f3n multiplataforma llega a su versi\u00f3n 1.9"},"content":{"rendered":"<p><strong>Hace unos d\u00edas se ha dado a conocer el lanzamiento de la nueva versi\u00f3n del lenguaje de programaci\u00f3n Julia, la 1.9, que combina cualidades como alto rendimiento, soporte para escritura din\u00e1mica y herramientas integradas para programaci\u00f3n paralela. La sintaxis de Julia es cercana a MATLAB, con algunos elementos tomados de Ruby y Lisp.<\/strong><br \/>\n<img decoding=\"async\" src=\"https:\/\/www.glub.biz\/media\/images\/2023\/julia-lang.jpg\" alt=\"Julia (1.9)\" class=\"alignnone size-medium\" width=\"480\"><\/p>\n<p>Julia se destaca por ser un lenguaje de programaci\u00f3n multiplataforma y multiparadigma de tipado din\u00e1mico de alto nivel y alto desempe\u00f1o para la computaci\u00f3n gen\u00e9rica, t\u00e9cnica y cient\u00edfica, con una sintaxis similar a la de otros entornos de computaci\u00f3n similares.<!--more--><\/p>\n<p><strong>Principales novedades de Julia 1.9<\/strong><\/p>\n<p>En esta nueva versi\u00f3n que se presenta de Julia 1.9 se destacan diversas mejoras en el tiempo de ejecuci\u00f3n\/compilador, ya que hubo una reducci\u00f3n significativa del tiempo hasta la primera ejecuci\u00f3n. La compilaci\u00f3n previa del paquete ahora guarda el c\u00f3digo nativo en \u00abpkgimage\u00bb, lo que significa que el c\u00f3digo generado durante la compilaci\u00f3n previa no necesitar\u00e1 volver a compilarse despu\u00e9s de cargar el paquete. El uso del modo pkgimages se puede deshabilitar con la opci\u00f3n \u00ab\u2013pkgimages=no\u00bb.<\/p>\n<p>Otro de los cambios que se destaca, son las llamadas con argumentos no espec\u00edficos del tipo ahora se pueden optimizar mediante divisi\u00f3n de uni\u00f3n para inyecci\u00f3n o resoluci\u00f3n est\u00e1tica, incluso si hay varios tipos diferentes de candidatos de env\u00edo. Esto puede mejorar el rendimiento en determinadas situaciones en las que los tipos de objetos no se resuelven completamente de forma est\u00e1tica, al resolver de forma est\u00e1tica los sitios de llamadas \u00ab@nospecialize-d\u00bb y evitar la recompilaci\u00f3n.<\/p>\n<p>Los literales de un solo car\u00e1cter ahora admiten la misma sintaxis que los literales de cadena; aquellos la sintaxis puede representar secuencias UTF-8 no v\u00e1lidas, seg\u00fan lo permita el tipo Char.<\/p>\n<p>Ademas de ello, en Linux y Windows, la opci\u00f3n \u00ab\u2013threads=auto\u00bb ahora intenta determinar la cantidad disponible de procesadores en funci\u00f3n de la afinidad de la CPU, que es una m\u00e1scara que normalmente se establece en entornos HPC y en la nube.<\/p>\n<p>Se ha deshabilitado la opci\u00f3n \u00ab\u2013math-mode=fast\u00ab, en lugar de la cual se recomienda utilizar la macro \u00ab@fastmath\u00ab, que tiene una sem\u00e1ntica bien definida, ademas de que el par\u00e1metro \u00ab\u2013threads\u00bb ahora tiene el formato \u00abauto | N[,auto|M]\u00bb, donde M especifica la cantidad de subprocesos interactivos que se crear\u00e1n.<\/p>\n<p>Se agreg\u00f3 la opci\u00f3n \u00ab\u2013heap-size-hint=<size>\u00bb para establecer el umbral despu\u00e9s del cual comienza la recolecci\u00f3n activa de elementos no utilizados. El tama\u00f1o se puede especificar en bytes, kilobytes (1000 KB), megabytes (300 MB) o gigabytes (1,5 GB).<\/p>\n<p>La macro \u00ab@invoke\u00bb introducida en la versi\u00f3n 1.7 ahora se exporta y est\u00e1 disponible para su uso. Adem\u00e1s, ahora usa el m\u00e9todo \u00abCore.Typeof(x)\u00bb en lugar de \u00abAny\u00bb cuando se omite la anotaci\u00f3n de tipo para el argumento \u00abx\u00bb. Esto es necesario para que los tipos pasados \u200b\u200bcomo argumentos se procesen correctamente.<\/p>\n<p>Por otra parte, \u00abThreads.@spawn\u00bb ahora tiene un primer argumento opcional de \u00ab:default\u00bb o \u00ab:interactive\u00bb. Una tarea interactiva requiere una respuesta de latencia baja y est\u00e1 dise\u00f1ada para ser breve o realizarse con frecuencia. Las tareas interactivas se ejecutar\u00e1n en subprocesos interactivos si se especifican al iniciar Julia.<\/p>\n<p><strong>De los dem\u00e1s cambios que se destacan:<\/strong><\/p>\n<ul>\n<li>Negar la funci\u00f3n de predicado \u00ab!f\u00bb ahora devuelve una funci\u00f3n compuesta \u00ab(!) \u2218 f\u00bb en lugar de una funci\u00f3n an\u00f3nima.<\/li>\n<li>Las funciones de divisi\u00f3n de dimensi\u00f3n ahora funcionan en m\u00faltiples dimensiones: \u00abeachslice\u00bb, \u00abeachrow\u00bb y \u00abeachcol\u00bb devuelven un objeto \u00abSlices\u00bb que permite el env\u00edo para proporcionar m\u00e9todos m\u00e1s eficientes.<\/li>\n<li>La macro \u00ab@kwdef\u00bb se ha agregado a la API p\u00fablica.<\/li>\n<li>Se solucion\u00f3 un problema con el orden de las operaciones en \u00abfld1\u00bb.<\/li>\n<li>La clasificaci\u00f3n ahora siempre es estable en el tiempo (QuickSort redise\u00f1ado).<\/li>\n<li>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.<\/li>\n<li>Printf: Mensajes de error reelaborados para cadenas mal formadas para una mejor legibilidad.<\/li>\n<li>Perfil: nueva funci\u00f3n \u00abProfile.take_heap_snapshot(file)\u00bb que escribe un archivo en formato \u00ab.heapsnapshot\u00bb basado en JSON compatible con Chrome.<\/li>\n<li>Se agreg\u00f3 soporte para la especificaci\u00f3n Unicode 15.<\/li>\n<li>Las combinaciones anidadas de tuplas y tuplas de caracteres con nombre ahora se pueden usar como par\u00e1metros de tipo.<\/li>\n<\/ul>\n<p>Para finalizar, comentar que el n\u00facleo de la implementaci\u00f3n est\u00e1 licenciado bajo la licencia MIT. Varias librer\u00edas 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\u00edas, est\u00e1 bajo la GPL). El lenguaje puede ser compilado como una librer\u00eda compartida, para que los usuarios puedan combinar Julia con su propio c\u00f3digo en C\/Fortran o con librer\u00edas propietarias de terceros.<\/p>\n<p>Fuentes: <a href=\"https:\/\/blog.desdelinux.net\/julia-el-lenguaje-de-programacion-multiplataforma-llega-a-su-version-1-9\/\" target=\"_blank\" rel=\"noopener noreferrer\">DesdeLinux<\/a> y <a href=\"https:\/\/es.wikipedia.org\/wiki\/Julia_(lenguaje_de_programaci%C3%B3n)\" target=\"_blank\" rel=\"noopener noreferrer\">Wikipedia<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hace unos d\u00edas se ha dado a conocer el lanzamiento de la nueva versi\u00f3n del lenguaje de programaci\u00f3n Julia, la 1.9, que combina cualidades como alto rendimiento, soporte para escritura din\u00e1mica y herramientas integradas para programaci\u00f3n paralela. La sintaxis de &hellip; <a href=\"https:\/\/www.glub.biz\/?p=1044\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-1044","post","type-post","status-publish","format-standard","hentry","category-noticias"],"_links":{"self":[{"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/posts\/1044","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glub.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1044"}],"version-history":[{"count":1,"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/posts\/1044\/revisions"}],"predecessor-version":[{"id":1045,"href":"https:\/\/www.glub.biz\/index.php?rest_route=\/wp\/v2\/posts\/1044\/revisions\/1045"}],"wp:attachment":[{"href":"https:\/\/www.glub.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1044"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glub.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1044"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glub.biz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}