Lanzamiento del lenguaje de programación Go 1.18

Se presenta el lanzamiento del lenguaje de programación Go 1.18, 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 independientes 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.

La nueva versión agrega soporte para funciones y tipos genéricos (genéricos), con la ayuda de los cuales un desarrollador puede definir y usar funciones diseñadas para trabajar con varios tipos a la vez. También es posible utilizar interfaces para crear tipos combinados que abarquen múltiples tipos de datos. El soporte para genéricos se implementa sin romper la compatibilidad con el código existente. // Suma de valores establecidos, funciona para los tipos int64 y float64 func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Otra opción con una definición de tipo genérica: type Number interface { int64 | float64 } func SumNumbers[K comparable, V Number](m map[K]V) V { var s V for _, v := rango m { s += v } return s }

Otras mejoras:

  • Las utilidades para pruebas de código difuso están integradas en el conjunto de herramientas estándar. Durante las pruebas de fuzzing, se genera un flujo de todas las combinaciones aleatorias posibles de datos de entrada y se registran posibles fallas durante su procesamiento. Si una secuencia falla o no coincide con la respuesta esperada, es muy probable que este comportamiento indique un error o vulnerabilidad.
  • Se agregó soporte para espacios de trabajo multimodulares, lo que le permite ejecutar comandos en varios módulos a la vez, lo que le permite crear y ejecutar código simultáneamente en varios módulos.
  • Se han realizado importantes optimizaciones de rendimiento para sistemas basados ​​en procesadores Apple M1, ARM64 y PowerPC64. Habilitó la capacidad de usar registros en lugar de la pila para pasar argumentos a funciones y devolver el resultado. Desenrollado en línea mejorado de bucles por parte del compilador. La verificación de tipos en el compilador se ha rediseñado por completo. Algunas pruebas muestran un aumento del 20 % en el rendimiento del código en comparación con la versión anterior, pero la compilación en sí tarda aproximadamente un 15 % más.
  • En tiempo de ejecución, se aumentó la eficiencia de devolver la memoria liberada al sistema operativo y se mejoró el funcionamiento del recolector de basura, cuyo comportamiento se volvió más predecible.
  • Se han agregado nuevos paquetes net/netip y debug/buildinfo a la biblioteca estándar. La compatibilidad con TLS 1.0 y 1.1 está deshabilitada de forma predeterminada en el código del cliente. El módulo crypto/x509 dejó de procesar certificados firmados con el hash SHA-1.
  • Se han elevado los requisitos para el entorno en Linux, para que funcione ahora es necesario tener un kernel de Linux de al menos la versión 2.6.32. En la próxima versión, se esperan cambios similares para FreeBSD (se suspenderá el soporte para la rama FreeBSD 11.x) y se requerirá al menos FreeBSD 12.2 para funcionar.

Fuente: opennet.ru

Añadir un comentario