Lanzamento da linguaxe de programación Go 1.18

Preséntase a versión da linguaxe de programación Go 1.18, que está a ser desenvolvida por Google coa participación da comunidade como unha solución híbrida que combina o alto rendemento das linguaxes compiladas con vantaxes das linguaxes de script como a facilidade de escritura de código. , velocidade de desenvolvemento e protección contra erros. O código do proxecto distribúese baixo a licenza BSD.

A sintaxe de Go baséase en elementos familiares da linguaxe C con algúns préstamos da linguaxe Python. A linguaxe é bastante concisa, pero o código é fácil de ler e comprender. O código Go compílase en ficheiros executables binarios autónomos que se executan de forma nativa sen usar unha máquina virtual (intégranse como compoñentes de execución de módulos de perfilado, depuración e outros subsistemas de detección de problemas en tempo de execución), o que permite un rendemento comparable aos programas C.

O proxecto desenvólvese inicialmente pensando na programación multiproceso e na operación eficiente en sistemas multinúcleo, incluíndo a provisión de medios a nivel de operador para organizar a computación paralela e a interacción entre métodos executados en paralelo. A linguaxe tamén ofrece protección integrada contra bloques de memoria sobreasignados e ofrece a posibilidade de utilizar un colector de lixo.

A nova versión engade soporte para funcións e tipos xenéricos (xenéricos), coa axuda dos cales un desenvolvedor pode definir e utilizar funcións deseñadas para traballar con varios tipos á vez. Tamén é posible usar interfaces para crear tipos combinados que abranguen varios tipos de datos. A compatibilidade con xenéricos implícase sen romper a compatibilidade con versións anteriores co código existente. // Suma os valores de conxunto, funciona para os tipos int64 e float64 func SumIntsOrFloats[K comparable, V int64 | float64](m mapa[K]V) V { var s V para _, v := rango m { s += v } return s } // Outra opción cunha definición de tipo xenérico: type Number interface { int64 | float64 } func SumNumbers[K comparable, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }

Outras melloras:

  • As utilidades para probas de código fuzzing están integradas no conxunto de ferramentas estándar. Durante a proba de fuzzing, xérase un fluxo de todas as posibles combinacións aleatorias de datos de entrada e rexístranse posibles fallos durante o seu procesamento. Se unha secuencia falla ou non coincide coa resposta esperada, é moi probable que este comportamento indique un erro ou unha vulnerabilidade.
  • Engadiuse soporte para espazos de traballo multimodulares, o que lle permite executar comandos en varios módulos á vez, o que lle permite crear e executar código simultáneamente en varios módulos.
  • Realizáronse importantes optimizacións de rendemento para sistemas baseados nos procesadores Apple M1, ARM64 e PowerPC64. Activouse a posibilidade de usar rexistros en lugar da pila para pasar argumentos ás funcións e devolver o resultado. Mellora o desenrolo en liña de bucles polo compilador. A verificación de tipos no compilador foi completamente redeseñada. Algunhas probas mostran un aumento do 20% no rendemento do código en comparación coa versión anterior, pero a compilación en si leva un 15% máis.
  • En tempo de execución, aumentou a eficiencia de devolver memoria liberada ao sistema operativo e mellorouse o funcionamento do colector de lixo, cuxo comportamento se fixo máis previsible.
  • Engadíronse novos paquetes net/netip e debug/buildinfo á biblioteca estándar. A compatibilidade con TLS 1.0 e 1.1 está desactivada de forma predeterminada no código do cliente. O módulo crypto/x509 deixou de procesar certificados asinados mediante o hash SHA-1.
  • Aumentáronse os requisitos para o ambiente en Linux; para que funcione, agora cómpre ter un núcleo Linux de polo menos a versión 2.6.32. Na próxima versión, espéranse cambios similares para FreeBSD (o soporte para a rama FreeBSD 11.x será descontinuado) e, polo menos, será necesario que FreeBSD 12.2 funcione.

Fonte: opennet.ru

Engadir un comentario