Lanzamiento del lenguaje de programación Go 1.19

Se presenta el lanzamiento del lenguaje de programación Go 1.19, que está siendo desarrollado por Google con la participación de la comunidad como una solución híbrida que combina el alto rendimiento de los lenguajes compilados con ventajas de los lenguajes de scripting como la facilidad para escribir código. , velocidad de desarrollo y protección contra errores. El código del proyecto se distribuye bajo la licencia BSD.

La sintaxis de Go se basa en elementos familiares 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 comprender. El código Go se compila en archivos ejecutables binarios separados que se ejecutan de forma nativa, sin utilizar una máquina virtual (los módulos de creación de perfiles, depuración y otros subsistemas de detección de problemas en tiempo de ejecución se integran como componentes en tiempo de ejecución), lo que permite un rendimiento comparable al de los programas C.

El proyecto se desarrolla inicialmente con miras a la programación multiproceso y el funcionamiento eficiente en sistemas multinúcleo, incluido el suministro de medios a nivel de operador para organizar la computación paralela y la interacción entre métodos ejecutados en paralelo. El lenguaje también proporciona protección integrada contra bloques de memoria sobreasignados y ofrece la posibilidad de utilizar un recolector de basura.

Entre los cambios en la nueva versión:

  • Se ha trabajado para mejorar el soporte para funciones y tipos genéricos (genéricos) agregados en la última versión, con la ayuda de los cuales un desarrollador puede definir y usar funciones diseñadas para trabajar con varios tipos a la vez. Se llevó a cabo la optimización: el rendimiento de algunos programas que utilizan genéricos aumentó en un 20%.
  • La documentación de comentarios ha agregado soporte para enlaces, listas y una sintaxis más simple para definir encabezados. La utilidad gofmt proporciona formato que tiene en cuenta las capacidades ampliadas de los comentarios con documentación API.
  • El modelo de memoria para el lenguaje Go se ha revisado para que sea coherente con los modelos de los lenguajes C, C++, Java, JavaScript, Rust y Swift que no admiten valores atómicos consistentes secuenciales. Para facilitar el uso de valores atómicos, el paquete sync/atomic ofrece nuevos tipos como atomic.Int64 y atomic.Pointer[T]. El cambio del modelo de memoria no afectó la compatibilidad con el código escrito anteriormente.
  • Para mejorar la seguridad, el módulo os/exec ahora no tiene en cuenta 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).
  • El recolector de basura ahora tiene la capacidad de definir límites de memoria flexible, que se aplican limitando el tamaño del montón y devolviendo la memoria al sistema de manera más agresiva, es decir, No se garantiza que el consumo esté dentro de los límites especificados en todas las condiciones. Los límites suaves pueden resultar útiles para optimizar programas que se ejecutan en contenedores con un tamaño de memoria fijo.
  • Se agregó una nueva restricción de compilación "unix" que se puede usar en líneas "go:build" para filtrar sistemas tipo Unix (aix, android, darwin, dragonfly, freebsd, hurd, illumos, ios, linux, netbsd, openbsd, solaris ).
  • Se han implementado 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. En sistemas Unix, se ha implementado el uso automático de descriptores de archivos adicionales (aumentando el límite RLIMIT_NOFILE). Para acelerar las expresiones de conmutador grandes en sistemas x86-64 y ARM64, se utilizan tablas de salto, lo que permite procesar expresiones de conmutador grandes hasta un 20 % más rápido. En los sistemas riscv64, los argumentos de las funciones se pasan a través de los registros de la CPU, lo que permite un aumento del rendimiento de aproximadamente un 10 %.
  • Se agregó soporte experimental para entornos Linux en sistemas con procesadores Loongson basados ​​en la arquitectura LoongArch de 64 bits (GOARCH=loong64).

Fuente: opennet.ru