Llegamos a ustedes gracias a:



Noticias

Go 1.17 pasa a beta, con mejoras en el lenguaje y el compilador

[15/06/2021] Go (golang) 1.17, la próxima versión del lenguaje de programación de código abierto desarrollado por Google, está ahora en fase de lanzamiento beta, con cambios destinados a simplificar la codificación para la seguridad.

La primera beta se publicó el 10 de junio, y la versión de producción se espera para agosto. Las notas de la versión citan tres pequeñas mejoras en el lenguaje, destinadas a simplificar la escritura de código que se ajuste a las reglas de seguridad de unsafe.Pointer. Estas mejoras incluyen:

* Una expresión s de tipo []T puede ahora ser convertida a puntero de matriz de tipo *[N]T. Si a es el resultado de dicha conversión, los índices correspondientes que están en el rango se refieren a los mismos elementos subyacentes: &a[i] == &s[i] para 0 <= i < N. La conversión entra en pánico si len(s) es menor que N.

  • unsafe.Add: unsafe.Add(ptr, len) añade len a ptr y devuelve el puntero actualizado unsafe.Pointer(uintptr(ptr) + uintptr(len)).
  • unsafe.Slice: Para una expresión ptr de tipo *T, unsafe.Slice(ptr, len) devuelve una rebanada de tipo []T cuya matriz subyacente comienza en ptr y cuya longitud y capacidad son len.

Para el compilador, Go 1.17 implementa una nueva forma de pasar los argumentos y resultados de las funciones utilizando registros en lugar de la pila. Esto está habilitado para Linux, MacOS y Windows en la arquitectura x86 de 64 bits. La evaluación comparativa ha mostrado una mejora del rendimiento de alrededor del 5% y una reducción típica del tamaño binario de alrededor del 2%. Este cambio no afecta a la funcionalidad del código Go seguro, pero puede afectar al código fuera de las directrices de compatibilidad con un impacto mínimo. También con el compilador, las funciones que contienen cierres pueden ser inline. Un efecto de esto es que una función con un cierre puede producir una función de cierre distinta para cada lugar en el que se inline la función. Este cambio podría revelar errores en los que las funciones Go se comparan incorrectamente por el valor del puntero. Las funciones Go, por definición, no son comparables.

En el área de la carga de módulos, si un módulo especifica go 1.17 o superior en su archivo go.mod, sus requisitos transitivos ahora se cargan de forma perezosa, evitando la necesidad de descargar o leer archivos go.mod para dependencias que de otro modo serían irrelevantes. También en Go 1.17, hay nuevas advertencias para los métodos As, Is y Unwrap. La herramienta cover, por su parte, ahora utiliza un analizador optimizado de golang.org.x.tools/cover, que puede ser notablemente más rápido al analizar grandes archivos de sobrecarga. También hay cambios menores en la biblioteca.

Las distribuciones binarias y de código fuente de la beta de Go 1.17 pueden descargarse de golang.org. Aquellos que tengan Go ya instalado pueden acceder a la beta utilizando el siguiente comando go:

La versión anterior, Go 1.16, estuvo disponible en febrero e incluía mejoras en las bibliotecas y en el tiempo de ejecución. Las versiones estables actuales incluyen Go 1.16.5 y Go 1.15.13. En una futura versión del lenguaje está prevista una función de "fuzzing" para los desarrolladores de Go.