Go 1.20 chega com suporte PGO experimental

Go 1.20 chega com suporte PGO experimental
Go 1.20 chega com suporte PGO experimental

Acaba de sair a nova versão da linguagem de programação Go 1.20, que está sendo desenvolvida pelo Google com a participação da comunidade como uma solução híbrida que combina o alto desempenho de linguagens compiladas. Além disso, a Go 1.20 chega com suporte PGO experimental.

A nova edição do Go 1.20 se beneficiou de uma fase de desenvolvimento estendida, possibilitada por testes extensivos anteriores e estabilidade geral da base de código aprimorada.

Go 1.20 chega com suporte PGO experimental

Vale ressaltar que o projeto é desenvolvido inicialmente visando a programação multithread e operação eficiente em sistemas multicore, incluindo o fornecimento de meios implementados em operadora para organizar a computação paralela e interação entre métodos executados em paralelo. A linguagem também fornece proteção integrada contra estouros de blocos de memória alocados e fornece a capacidade de usar o coletor de lixo.

A Go tem como base nos elementos familiares da linguagem C com alguns empréstimos da linguagem Oberon. A linguagem é bastante concisa, mas o código é fácil de ler e entender.

Principais novidades do Go 1.20

Go 1.20 chega com suporte PGO experimental

Nesta nova versão do Go 1.20, destaca-se que foi fornecido suporte experimental para otimização guiada por perfil (PGO), que leva em consideração as características determinadas em tempo de execução. Levando em consideração o perfil de execução durante a montagem, o desempenho dos aplicativos pode ser melhorado em 3-4%. Adicionada a opção “-pgo” para incluir PGO em go build, go install e outros comandos de build.

Outro novo recurso é que as funções SliceData, String e StringData foram adicionadas ao pacote unsafe para manipulações de baixo nível com fatias (arrays de tamanho dinâmico) e strings (por exemplo, para converter uma área de memória apontada por um ponteiro para uma string do tipo string e vice-versa).

Além disso, destaca-se também que o cover, foi estendido com a capacidade de coletar perfis para programas em geral e não apenas para testes de unidade, também foi adicionada a opção “-cover” para ir para compilar, instalar e outros comandos construir para gerar um perfil de cobertura.

O utilitário go está livre de links para pacotes de biblioteca padrão pré-compilados localizados no diretório $GOROOT/pkg, o que possibilitou excluí-los da distribuição e reduzir o tamanho dos dados baixados. Pacotes de biblioteca padrão, como pacotes regulares, agora são compilados conforme necessário e armazenados em cache no cache de compilação.

O comando go desativa o uso do pacote cgo por padrão em sistemas sem um conjunto de ferramentas para compilar código C. Esses sistemas agora usam variantes dos pacotes de biblioteca padrão na linguagem Go, em vez de usar pacotes pré-compilados.

Das outras mudanças que se destacam da nova versão:

  • O utilitário veterinário possui avisos adicionais sobre problemas com variáveis usadas em loops que são detectados quando os testes são executados em paralelo.
  • As regras de conversão de tipo são estendidas com a possibilidade de conversão direta de um segmento para um array.
  • A especificação define explicitamente a ordem na qual os elementos do array e os campos struct são comparados.
  • O pacote crypto/ecdh foi adicionado à biblioteca padrão com suporte para troca de chaves ECDH (Elliptic Curve Diffie-Hellmann).
  • Adicionado um novo tipo http.ResponseController para criar controladores de resposta HTTP avançados.
  • Adicionada a função Rewrite ao tipo httputil.ReverseProxy para modificar a solicitação.
  • Adicionada a função context.WithCancelCause, que permite cancelar a chamada com um erro especificado.
  • Os campos Cancel e WaitDelay foram adicionados ao tipo os/exec.Cmd para especificar o comportamento quando o contexto é cancelado ou o processo é finalizado.
  • No compilador e no coletor de lixo, o consumo de memória foi reduzido e o desempenho foi otimizado (aumento de velocidade chega a 2%).
  • Trabalho foi feito para acelerar a compilação: uma redução no tempo de compilação pode chegar a 10%.
  • Adicionado suporte experimental para a plataforma FreeBSD em sistemas com arquitetura RISC-V (GOOS=freebsd, GOARCH=riscv64).

Finalmente , se você estiver interessado em aprender mais sobre isso, pode conferir os detalhes no link a seguir.