Llegamos a ustedes gracias a:



Noticias

Golang adelanta la optimización guiada por perfiles

[14/12/2022] Go 1.20, una actualización prevista del lenguaje de código abierto desarrollado por Google y conocido por su simplicidad, concurrencia y características de programación funcional, acaba de alcanzar la fase de versión candidata. La nueva versión incluye la optimización guiada por perfiles (PGO) para el compilador.

Anunciada el 7 de diciembre, la versión candidata Go 1.20 puede descargarse de go.dev. La versión de producción de Go 1.20 está prevista para febrero del 2023.

[Reciba lo último de CIO Perú suscribiéndose a nuestro newsletter semanal]

Con Go 1.20, la compatibilidad previa con PGO permite a la cadena de herramientas del compilador realizar optimizaciones específicas de la aplicación y de la carga de trabajo en función de los datos del perfil de ejecución. Actualmente, el compilador admite perfiles de CPU pprof, que pueden recopilarse a través de los paquetes runtime/pprof o net/http/pprof. La versión 1.20 utiliza PGO para alinear de forma más agresiva las funciones en los puntos de llamada en caliente. Las pruebas comparativas de un conjunto representativo de programas Go muestran que activar la optimización inline de PGO mejora el rendimiento entre un 3% y un 4%. Se prevén más optimizaciones PGO para futuras versiones.

Go 1.20 también introduce cuatro cambios en el lenguaje. En primer lugar, una mejora introducida en la versión Go 1.17 del 2021 -la posibilidad de convertir una rebanada en un puntero de matriz- se ha ampliado para permitir conversiones de una rebanada a una matriz, según el borrador de las notas de la versión.

En segundo lugar, el paquete unsafe define tres nuevas funciones: SliceData, String y StringData. Estas funciones proporcionan la capacidad completa de construir y deconstruir valores de rebanada y cadena sin depender de la representación exacta.

En tercer lugar, la especificación define ahora que los valores struct se comparan campo a campo, considerando los campos en el orden en que aparecen en la definición del tipo struct y deteniéndose en la primera discrepancia. Y, en cuarto lugar, los tipos comparables, como las interfaces ordinarias, ahora pueden satisfacer restricciones comparables, incluso si los argumentos del tipo no son estrictamente comparables. Esto permite la instanciación de un parámetro de tipo restringido por comparable con un argumento de tipo no estrictamente comparable como un tipo de interfaz, o un tipo compuesto que contenga un tipo de interfaz.

También con Go 1.20:

  • El tiempo de ejecución añade soporte experimental para la asignación de arena a prueba de memoria que hace posible liberar ansiosamente la memoria en masa. Esto podría mejorar el rendimiento de la CPU.
  • Se admite la recopilación de perfiles de cobertura de código para programas, incluso para aplicaciones y pruebas de integración, en lugar de sólo pruebas unitarias.
  • El directorio $GOROOT/pkg ya no almacena actividades de paquetes precompilados para la biblioteca estándar. En su lugar, los paquetes de la biblioteca se construyen según sea necesario y se almacenan en caché en la caché de construcción. Esto reduce el tamaño de la distribución Go y evita la desviación de la cadena de herramientas C para los paquetes que utilizan cgo.
  • La implementación de go test -json ha sido mejorada para ser más robusta. Los programas que ejecutan go test -json no necesitan actualizaciones.
  • El comando gocode ahora define etiquetas de construcción de características de arquitectura.
  • El comando go ahora deshabilita cgo por defecto en sistemas sin una cadena de herramientas C.
  • El comando go version -m ahora soporta la lectura de más tipos de binarios Go, más notablemente DLLs de Windows construidos con go build- buildmode=c shared y binarios Linux sin permiso de ejecución.
  • Se añade soporte experimental para FreeBSD en RISC-V.
  • Go 1.20 es la última versión que ejecutará macOS 10.13 High Sierra o 10.14 Mojava. Go 1.21 necesitará macOS 10.15 Catalina o posterior.

Go 1.19, que mejoró los genéricos y el modelo de memoria, se publicó el 2 de agosto.