Después de seis meses de desarrollo, el lenguaje de programación Go, desarrollado por Google con la participación de la comunidad, ha sido lanzado como versión 1.25. El lenguaje combina el alto rendimiento de los lenguajes compilados con las ventajas de los lenguajes de script, como la facilidad de escritura de código, la alta velocidad de desarrollo y la 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 Oberon. 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 el uso de 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 desarrolló inicialmente con miras a la programación multiproceso y al funcionamiento eficiente en sistemas multinúcleo. Por ejemplo, a nivel de operador, se implementan herramientas para organizar cálculos paralelos y la interacción entre métodos paralelos. El lenguaje también proporciona protección contra desbordamiento de búfer incorporada y capacidades de recolección de basura.
Entre los cambios en la nueva versión:
- Se añadió el recolector de basura experimental "greenteagc", diseñado para mejorar el rendimiento de la creación y el escaneo de objetos pequeños. Se ha demostrado que las aplicaciones que utilizan la recolección de basura de forma intensiva, utilizando "greenteagc", reducen la sobrecarga de la recolección de basura entre un 10 % y un 40 %.
- Se han añadido los paquetes experimentales encoding/json/v2 y encoding/json/jsontext. El primer paquete incluye una implementación reescrita y de alto rendimiento del paquete encoding/json. El segundo paquete proporciona funciones para el procesamiento de bajo nivel de la sintaxis JSON.
- Se ha agregado un nuevo paquete de prueba/synctest para probar la sincronización entre diferentes subprocesos de código paralelo.
- El comando "go build" tiene la opción "-asan" habilitada de forma predeterminada, que verifica si hay fugas de memoria cuando el programa finaliza.
- Se han agregado los nuevos analizadores "waitgroup" y "hostport" al comando "go vet" para verificar el uso incorrecto de sync.WaitGroup.Add y fmt.Sprintf("%s:%d", host, port).
- Al calcular el valor de GOMAXPROCS, ahora no solo establece la cantidad de CPU lógicas disponibles, sino que también tiene en cuenta los límites de rendimiento de la CPU aplicados en los contenedores.
- El compilador y el enlazador ahora admiten la generación de información de depuración en el formato DWARF5, que proporciona una representación más compacta de los datos.
Fuente: opennet.ru

