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.24. 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 proporciona soporte completo para alias de tipo genéricos: un alias de tipo se puede parametrizar, al igual que un tipo recién definido (ahora se permiten parámetros de tipo al definir un alias de tipo). tipo conjunto[P comparable] = mapa[P]bool
- Se han realizado optimizaciones en el tiempo de ejecución, que han dado como resultado una reducción del 2-3% en la carga del procesador al ejecutar pruebas de rendimiento típicas. Entre las optimizaciones introducidas: una nueva implementación incorporada de la operación "mapa", basada en el uso de tablas hash Swiss Table; aumentar la eficiencia del uso de la memoria al colocar objetos pequeños; Nueva implementación de mutex incorporada en el tiempo de ejecución.
- El comando "go" para los módulos Go ahora tiene un mecanismo para rastrear dependencias ejecutables (herramientas auxiliares escritas en el lenguaje Go y utilizadas durante el desarrollo del módulo, como linters o utilidades de formato de código). Las utilidades se definen en el archivo go.mod a través de la directiva "tool", para agregarlas al módulo actual se sugiere el comando "go get -tool" (por ejemplo, "go get -tool golang.org/x/tools/cmd/stringer"). Para ejecutar la utilidad especificada en la directiva "tool", se ha agregado el comando "go tool utility_name".
- Se ha agregado la opción "-json" a los comandos "go build" y "go install" para generar salida en formato JSON.
- Se agregó la variable de entorno GOAUTH para establecer los parámetros de autenticación necesarios para recuperar módulos con acceso restringido.
- El comando "go vet" tiene un nuevo analizador de pruebas que identifica errores comunes al ejecutar pruebas, herramientas de fuzzing, utilidades de rendimiento y aplicaciones de muestra.
- La biblioteca estándar incluye implementaciones de algoritmos criptográficos aprobados por el estándar de seguridad FIPS 140-3.
- Se ha agregado el método B.Loop al paquete de pruebas para realizar pruebas de rendimiento. El uso de "for b.Loop() { … }" en lugar de bucles regulares le permite evitar que el compilador realice una optimización completa del cuerpo del bucle y mover las etapas de configuración y limpieza de la prueba fuera del bucle.
- Se agregó el tipo os.Root, que permite aislar operaciones con el sistema de archivos a un directorio determinado.
- Se ha agregado al tiempo de ejecución un nuevo mecanismo de finalización runtime.AddCleanup, que es más flexible y eficiente que runtime.SetFinalizer.
- Se agregó el paquete débil con la implementación de punteros débiles que no poseen el objeto, no aumentan el contador de referencia y no impiden que se libere el objeto.
- Paquetes añadidos: crypto/mlkem con implementación de criptoalgoritmos ML-KEM-768 y ML-KEM-1024 (Kyber), resistentes a la selección en una computadora cuántica; crypto/hkdf con implementación de la función de generación de claves basada en HMAC (RFC 5869); crypto/pbkdf2 con implementación de la función de generación de clave basada en contraseña (PBKDF2, RFC 8018); crypto/sha3 con implementación de hashes SHA-3.
- Se agregó el paquete de prueba experimental/synctest con funciones para probar subprocesos múltiples.
- Soporte mejorado para WebAssembly. Se agregó la capacidad de crear aplicaciones Go en forma de biblioteca o controlador WASI (Interfaz del sistema WebAssembly). Se implementó la directiva go:wasmexport para exportar funciones para su uso en WebAssembly.
- La utilidad objdump se ha actualizado para admitir el desensamblaje para las arquitecturas LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) y S390X (GOARCH=s390x).
Fuente: opennet.ru