Golang

Hace poco se dio a conocer el lanzamiento de la nueva versión del lenguaje de programación «Go 1.19», versión que llega a mejorar el lanzamiento anterior añadiendo diversas mejoras y sobre todo correcciones de errores, de las novedades que podemos destacar están las mejoras del manejo de memoria, mejoras de seguridad, entre otras cosas más.

Para quienes desconocen de Go, deben saber que este es un lenguaje de programación que es desarrollado en participación de la comunidad como una solución híbrida que combina el alto rendimiento de los lenguajes compilados con ventajas tales como los lenguajes de scripting como la facilidad para escribir código de desarrollo y protección contra errores.

La sintaxis de Go se basa en los elementos habituales del lenguaje C con algunos préstamos del lenguaje Python. El lenguaje es bastante conciso, pero el código es fácil de leer y entender.

El código de Go se compila en archivos ejecutables binarios independientes que se ejecutan de forma nativa, sin usar una máquina virtual (los subsistemas de detección de problemas de creación de perfiles, depuración y otros en tiempo de ejecución están integrados como componentes de tiempo de ejecución ).

Principales novedades de Go 1.19

En esta nueva versión que se presenta de Go 1.19 se destaca que se ha trabajado para refinar el soporte para funciones y tipos genéricos agregados en la última versión, con la ayuda de los cuales el desarrollador puede definir y usar funciones diseñadas para trabajar con varios tipos a la vez, ademas de que se ha llevado a cabo la optimización del rendimiento de algunos programas que utilizan genéricos ha aumentado en un 20 %.

Otro de los cambios que se destaca de la nueva versión es que se agregó soporte para enlaces, listas y una sintaxis más simple para definir encabezados en los comentarios del documento. La utilidad gofmt proporciona formato teniendo en cuenta las características avanzadas de los comentarios con la documentación de la API.

Ademas de ello se revisó el modelo de memoria Go para alinearlo con C, C++, Java, JavaScript, Rust y Swift que no admiten valores atómicos consistentes secuencialmente. Se han introducido nuevos tipos como atomic.Int64 y atomic.Pointer[T] en el paquete sync/atomic para facilitar el uso de valores atómicos.

Por otra parte, tambien se menciona que el recolector de basura ahora tiene la capacidad de definir límites flexibles, que se imponen al limitar el tamaño del almacenamiento dinámico y devolver la memoria al sistema de manera más agresiva, es decir, no se garantiza que el consumo estará dentro de los límites especificados en todas las condiciones. Los límites suaves pueden ser útiles para optimizar programas que se ejecutan en contenedores de memoria fija.

Tambien se destaca que en los sistemas Unix, los descriptores de archivos adicionales se habilitan automáticamente (aumentando el límite RLIMIT_NOFILE), para acelerar las expresiones de cambio grandes en los sistemas x86-64 y ARM64, se utilizan tablas de salto, que permiten procesar expresiones de cambio grandes hasta un 20 % más rápido.

En los sistemas riscv64, se implementó el paso de argumentos de función a través de registros de la CPU, lo que permitió lograr un aumento del rendimiento de alrededor del 10 %.

De los demás cambios que se destacan de esta nueva versión:

  • Se implementaron numerosas optimizaciones de rendimiento.
  • Se agregó soporte para configurar dinámicamente el tamaño de la pila de rutinas para reducir el tamaño de los datos copiados
  • Se agregó soporte experimental para entornos Linux en sistemas con procesadores Loongson basados ​​en la arquitectura LoongArch de 64 bits (GOARCH=loong64).
  • Cambiar el modelo de memoria no afectó la compatibilidad con el código escrito previamente.
  • Se agregó una nueva restricción de compilación «unix» que se puede usar en las líneas «go:build» para filtrar los sistemas similares a Unix (aix, android, darwin, dragonfly, freebsd, hurd, illumos, ios, linux, netbsd, openbsd, solaris).
  • Para mejorar la seguridad, el módulo os/exec ahora ignora las rutas relativas al expandir la variable de entorno PATH (por ejemplo, al determinar la ruta de un archivo ejecutable, el directorio actual ya no se verifica).

Finalmente si estás interesado en poder conocer más al respecto sobre este nuevo lanzamiento, puedes consultar los detalles en el siguiente enlace.

 

Fuente: desdelinux

¿Quién está en línea?

Hay 461 invitados y ningún miembro en línea